Я пытаюсь использовать строку, которая будет использоваться как строка регулярных выражений.
В следующем коде:
_pattern
является образцом как abba
и я пытаюсь проверить _string
следует за _pattern
(например catdogdogcat
.)
Создание строки регулярного выражения, которая будет использоваться в re.match()
rxp
в следующем коде является регулярным выражением, которое я пытаюсь создать для соответствия _string
(например, для примера выше это будет (.+)(.+)\\2\\1
). Что успешно сгенерировано. Но re.match()
возвращает None
.
Я хочу понять, почему он не работает и как его исправить?
import re
_pattern = "abba" #raw_input().strip()
_string = "catdogdogcat" #raw_input().strip()
hm = {}
rxp = ""
c = 1
for x in _pattern:
if hm.has_key(x):
rxp += hm[x]
continue
else:
rxp += "(.+)"
hm[x]="\\\\"+str(c)
c+=1
print rxp
#print re.match(rxp,_string) -> (Tried) Not working
#print re.match(r'rxp', _string) -> (Tried) Not working
print re.match(r'%s' %rxp, _string) # (Tried) Not working
Выход
(.+)(.+)\\2\\1 None
Ожидаемый результат
(.+)(.+)\\2\\1 <_sre.SRE_Match object at 0x000000000278FE88>
Боковое примечание: 'dict.has_key' устарел на века. 'hm.has_key (x)' может измениться на 'x в hm' и работает быстрее, в не-устаревшем, более совместимом с остальным способом Python. Точно так же 'not hm.has_key (x)' лучше выражается как 'x not in hm'. – ShadowRanger
@ShadowRanger Я запомню это. Благодаря! – lordzuko