生成要在re.match()中使用的正则表达式字符串

时间:2016-09-27 14:03:24

标签: python regex

我正在尝试将字符串用作正则表达式字符串 在以下代码中:
_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

2 个答案:

答案 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)