我想匹配街道名称,可以采用“St / Ave / Road”的形式。后缀可能根本不存在,因此它可能只是“第一”。我也想知道后缀是什么。什么是合适的正则表达式?我试过了:
(.+)(\s+(St|Ave|Road))?
但似乎第一组贪婪地匹配整个字符串。我试着回顾一下(?<!
),但无法让它正常工作,因为它一直存在“look-behind requires fixed-width pattern
”之类的喷出错误。
如果它很重要,我正在使用Python。
有什么建议吗?
答案 0 :(得分:4)
只需添加问号即可让您的第一组不贪婪:
(.+?)(\s+(St|Ave|Road))?
答案 1 :(得分:3)
作为基于正则表达式的解决方案的替代方案,如何:
suffix = s.split(' ')[-1]
if suffix in ('St', 'Ave', 'Road'):
print 'suffix is', suffix
else:
print 'no suffix'
如果你必须使用正则表达式,只需使第一个匹配非贪婪,例如:r'.*?\s+(St|Ave|Road)$'
In [28]: print re.match(r'(.*?)\s+(St|Ave|Road)$', 'Main Road')
<_sre.SRE_Match object at 0x260ead0>
In [29]: print re.match(r'(.*?)\s+(St|Ave|Road)$', 'nothing here')
None
答案 2 :(得分:0)
你想要负面展望
(?!(St|Ave|Road))$
答案 3 :(得分:0)
背后的负面看法如何:
(?!<=(St|Ave|Road))$
似乎要严格表达要求