Python 匹配不以已知字符串列表结尾的字符串
我想匹配街道名称,可以是“街/大街/路”的形式。后缀可能根本不存在,所以它可能只是“第一个”。我还想知道后缀是什么。什么是适合它的正则表达式?我试过:Python 匹配不以已知字符串列表结尾的字符串,python,regex,Python,Regex,我想匹配街道名称,可以是“街/大街/路”的形式。后缀可能根本不存在,所以它可能只是“第一个”。我还想知道后缀是什么。什么是适合它的正则表达式?我试过: (.+)(\s+(St|Ave|Road))? 但第一组似乎与整个字符串非常匹配。我尝试了回溯(?),但无法使其正常工作,因为它不断地抛出错误,如“回溯需要固定宽度模式”” 如果有什么关系的话,我正在使用Python 有什么建议吗?作为基于regex的解决方案的替代方案,如何: suffix = s.split(' ')[-1] if suff
(.+)(\s+(St|Ave|Road))?
但第一组似乎与整个字符串非常匹配。我尝试了回溯(?),但无法使其正常工作,因为它不断地抛出错误,如“回溯需要固定宽度模式”
”
如果有什么关系的话,我正在使用Python
有什么建议吗?作为基于regex的解决方案的替代方案,如何:
suffix = s.split(' ')[-1]
if suffix in ('St', 'Ave', 'Road'):
print 'suffix is', suffix
else:
print 'no suffix'
如果必须使用正则表达式,只需将第一个匹配设置为非贪婪,如:r'.*?\s+(St|Ave|Road)$”
[28]中的In:print re.match(r'(.*)\s+(St|Ave | Road)$,'Main Road')
在[29]中:打印重新匹配(r'(.*)\s+(St|Ave | Road)$,“此处无任何内容”)
没有一个
只需添加一个问号,让您的第一组成员不贪婪即可:
(.+?)(\s+(St|Ave|Road))?
你想要消极的前瞻
(?!(St|Ave|Road))$
负面回顾如何:
(?!<=(St|Ave|Road))$
(?!在几秒钟内击败我,这样你就赢了。TIL。这真是太好了,多了一个字符就解决了我的问题。谢谢!删除了我的答案,支持这一点。Python的内置字符串方法比正则表达式可读性好得多,而且更易于维护。我可能有多个单词后缀,比如North East。不过,谢谢!这个想法很好,但没有wo问题:首先,这个正则表达式是不正确的-在它当前的形式中,它的意思是“断言它不可能匹配字符
(?!<=(St|Ave|Road))$