Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 匹配不以已知字符串列表结尾的字符串_Python_Regex - Fatal编程技术网

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))$