Python正则表达式不匹配

Vic*_*loy 0 python regex

有谁知道为什么这个正则表达式没有返回任何匹配?

local = u'Rua Engenheira Enedina Alves Marqu\xeas, 126 - Cajuru, Cajuru, Curitiba - PR'
p = re.compile(ur'\d[ ]+?-(.*?)(?:,|-)')
matches = re.match(p,local)
Run Code Online (Sandbox Code Playgroud)

链接到测试

当我在任何正则表达式测试工具中尝试这个正则表达式它返回我想要的东西时,我想要捕获这个单词

卡茹鲁

Mar*_*ers 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,'
Run Code Online (Sandbox Code Playgroud)

请参阅Python Regex HOWTO 的match()vs.search()部分:

match()函数仅检查RE在字符串开头是否匹配,同时search()将向前扫描字符串以进行匹配.记住这一区别非常重要.请记住,match()只会报告一个从0开始的成功比赛; 如果匹配不会从零开始,match()则不会报告.

请注意,您不必re.search()在此处调用模块级别; 编译后的表达式p也有一个search()方法:

>>> p.search(local).group()
u'6 - Cajuru,'
Run Code Online (Sandbox Code Playgroud)