Передача параметра в запрос соответствия в Neo4j с использованием Spring

Один из вариантов состоит в том, чтобы превратить строку в кортеж и заменить цифры с помощью расширенной формы http://wiki.answers.com/Q/What_does_expanded_form_mean

таким образом, чтобы a90 («a», 90,0), а a1 станет («a», 1)

ниже, является некоторым примером кода (который не очень эффективен из-за того, что он удаляет ведущие 0 из чисел )

alist=["something1",
    "something12",
    "something17",
    "something2",
    "something25and_then_33",
    "something25and_then_34",
    "something29",
    "beta1.1",
    "beta2.3.0",
    "beta2.33.1",
    "a001",
    "a2",
    "z002",
    "z1"]

def key(k):
    nums=set(list("0123456789"))
        chars=set(list(k))
    chars=chars-nums
    for i in range(len(k)):
        for c in chars:
            k=k.replace(c+"0",c)
    l=list(k)
    base=10
    j=0
    for i in range(len(l)-1,-1,-1):
        try:
            l[i]=int(l[i])*base**j
            j+=1
        except:
            j=0
    l=tuple(l)
    print l
    return l

print sorted(alist,key=key)

вывод:

('s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g', 1)
('s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g', 10, 2)
('s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g', 10, 7)
('s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g', 2)
('s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g', 20, 5, 'a', 'n', 'd', '_', 't', 'h', 'e', 'n', '_', 30, 3)
('s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g', 20, 5, 'a', 'n', 'd', '_', 't', 'h', 'e', 'n', '_', 30, 4)
('s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g', 20, 9)
('b', 'e', 't', 'a', 1, '.', 1)
('b', 'e', 't', 'a', 2, '.', 3, '.')
('b', 'e', 't', 'a', 2, '.', 30, 3, '.', 1)
('a', 1)
('a', 2)
('z', 2)
('z', 1)
['a001', 'a2', 'beta1.1', 'beta2.3.0', 'beta2.33.1', 'something1', 'something2', 'something12', 'something17', 'something25and_then_33', 'something25and_then_34', 'something29', 'z1', 'z002']

0
задан Bruno Peres 13 July 2018 в 13:20
поделиться

1 ответ

Передайте параметр как WHERE n.name =~ {0}. Что происходит, так это то, что параметр не заменяется внутри строки, поэтому параметр не имеет привязки в запросе, а вместо этого вы ищете строковый литерал «{0}», который всегда терпит неудачу.

Если вы хотите передать регулярное выражение в качестве параметра, вам нужно будет поместить часть «(? I)» в передаваемую строку, эффективно позволяя вашему коду решать регулярное выражение, а не только строку внутри него.

0
ответ дан FrobberOfBits 17 August 2018 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: