我正在尝试将字符串用作正则表达式字符串
在以下代码中:
_pattern
是一种类似abba
的模式,我正在尝试检查_string
_pattern
之后的catdogdogcat
(例如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>
预期输出
sqlite
答案 0 :(得分:1)
问题是你的正则表达式字符串变量有两个<div class="pricetag"> Hello
<div class="price">400</div>
</div>
<div class="pricetag"> Hello2
<div class="price"></div>
</div>
<div class="pricetag"> Hello3
<div class="price">250</div>
</div>
而不是一个。{/ p>
您可以使用
\\
像rxp.replace("\\\\", "\\")
这样的:
.match
修改强>
您还可以避免像这样获得双倍>>> print re.match(rxp.replace("\\\\", "\\"), _string)
<_sre.SRE_Match object at 0x10bf87c68>
>>> print re.match(rxp.replace("\\\\", "\\"), _string).groups()
('cat', 'dog')
:
导入重新
\\
答案 1 :(得分:0)
您应该使用字符串格式,而不是将rxp
硬编码到字符串中:
print re.match(r'%s'%rxp, _string)