python - Python re.findall 避免急切
问题描述
当引擎在正则表达式模式中找到第一个替代方案时,我遇到了问题,它停止分析右侧的其他字符串位置。例如,我有以下示例:
在ABC SCHOOL FOUNDATION COOPERATIVE PARTNERSHIP
我想要['foundation cooperative partnership']
匹配的字符串中。但是,我得到['foundation', 'cooperative']
是因为引擎找到foundation
然后继续使用以下cooperative
也匹配的单词。我正在使用以下代码:
import re
name='ABC SCHOOL FOUNDATION COOPERATIVE PARTNERSHIP'
regex='(community contribution company|foundation cooperative partnership|cooperative|foundation)(?=\s)'
found= re.findall(regex, name.lower())
print(found)
如何使正则表达式COOPERATIVE PARTNERSHIP
在分析后继续下一个单词,FOUNDATION
而不是在查找时放弃foundation
,然后cooperative
分别?
再次感谢
解决方案
更改(?=\s)
为\b
以匹配单词边界。字符串末尾没有空格,因此当它尝试匹配整个字符串时,前瞻失败。
并且几乎总是对正则表达式使用原始字符串,这样正则表达式转义序列就不会被作为字符串转义序列处理。
>>> regex=r'(community contribution company|foundation cooperative partnership|cooperative|foundation)\b'
>>> re.findall(regex, name.lower())
['foundation cooperative partnership']
推荐阅读
- python - Boost Python "cannot open source file 'pyconfig.h'" when importing using "#include
" - c# - 如何为使用 vbscript 从 LAN 复制文件的 c# 应用程序进行设置?
- java - Which is the referenced object of an interface variable containing an object of a class which implements the interface?
- c# - 在特定文件夹中按数字顺序排列文件
- laravel - Vuejs 组件未显示在我的 laravel 刀片中
- python - Python在字符串中打印ascii字符而不是值
- iframe - 是否可以使用 HTML 和 CSS 使 iframe 真正响应?
- sql-server - SP_Send_Dbmail 包含逗号
- angular - 测试通用 Angular 组件(不是通用类)
- ray - 无法将多个 GPU 与 Ray 一起使用