【发布时间】:2020-03-06 19:02:01
【问题描述】:
当引擎在正则表达式模式中找到第一个替代项时,我遇到了问题,它停止分析右侧的其他字符串位置。例如,我有以下示例:
在字符串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)
如何使正则表达式在分析FOUNDATION 后继续使用下一个单词COOPERATIVE PARTNERSHIP,而不是在分别找到foundation 和cooperative 时放弃?
再次感谢
【问题讨论】:
-
使用
\b或(?=\s|$)而不是(?=\s),因为(?=\s)声明后面有一个空格字符必须,但@ 末尾没有空格987654335@字符串。 -
并且在开头添加
\b也不会受到伤害(所以你总是匹配整个单词)。 -
如果您想将尾随标点符号视为单词的一部分,请使用
(?!\S)。 -
你需要在你的正则表达式前面使用
r来转义反斜杠并使其变为文字(将其视为原始字符串),否则你的修复将不起作用 -
您的模式与示例中输入字符串中的
foundation cooperative partnership不匹配,即使您让它停止单独停止匹配foundation和cooperative,因为partnership不是后跟一个空格字符。