有谁知道为什么这个正则表达式没有返回任何匹配?
local = u'Rua Engenheira Enedina Alves Marqu\xeas, 126 - Cajuru, Cajuru, Curitiba - PR'
p = re.compile(ur'\d[ ]+?-(.*?)(?:,|-)')
matches = re.match(p,local)
当我在任何正则表达式测试工具中尝试这个正则表达式时,它返回我想要的内容,我这个例子我想捕获单词
卡茹鲁
答案 0 :(得分:5)
您使用的是re.match()
,而不是re.search()
。 re.match()
锚定到开头。
使用re.search()
可以正常工作:
>>> local = u'Rua Engenheira Enedina Alves Marqu\xeas, 126 - Cajuru, Cajuru, Curitiba - PR'
>>> p = re.compile(ur'\d[ ]+?-(.*?)(?:,|-)')
>>> re.search(p, local)
<_sre.SRE_Match object at 0x104dde288>
>>> re.search(p, local).group()
u'6 - Cajuru,'
请参阅Python Regex HOWTO的match()
vs. search()
section:
match()
函数仅检查RE在字符串开头是否匹配,而search()
将向前扫描字符串以进行匹配。记住这一区别非常重要。请记住,match()
只会报告从0开始的成功匹配;如果匹配不会从零开始,match()
将不会报告。
请注意,您无需在此处调用模块级re.search()
; p
中的已编译表达式也有search()
方法:
>>> p.search(local).group()
u'6 - Cajuru,'