python - 与标点符号匹配整个字符串(使用\b 的问题)

标签 python regex regex-lookarounds regex-group

通常为了匹配完整的单词,我们使用 \b 作为单词分隔符,但是当我们处理包括标点符号的复合世界时,这种方法效果不太好。例如,假设有以下字符串:

basic school co-operative limited

如果我们应用以下正则表达式,我们将得到预期的合作有限。发生这种情况是由于交流发电机的顺序造成的:

\b(co-operative|co|co.|limited)\b

如果我无法控制正则表达式交流发电机的顺序并且得到以下正则表达式,会发生什么情况?

\b(co|co.|co-operative|limited)\b

在这种情况下,只有 co limit 会匹配,而不是 co-operative limit。有什么办法可以解决交替顺序的问题吗?

感谢您的无价帮助

最佳答案

由于您想要匹配完整的单词,因此可以将正则表达式末尾的 \b 断言更改为空格或字符串末尾的正向前瞻,例如

\b(co|co.|co-operative|limited)(?=\s|$)

Demo on regex101

如果您想在单词后允许使用某些标点符号,您可以将其添加到前瞻中,例如

\b(co|co.|co-operative|limited)(?=[\s.]|$)

关于python - 与标点符号匹配整个字符串(使用\b 的问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60105553/

相关文章:

regex - 将编译的正则表达式转换为字符串

Python 正则表达式非捕获组

Javascript RegExp 替换为负前瞻

python - pandas如何检查每组中列值之间的差异是否在范围内

ruby 正则表达式 : Replace tag type

python - 数据列值未更改为浮点型

java - 无法匹配我的正则表达式

c# - 删除变音符号,某些字母上的某些变音符号除外

python - 如何缩短这个二维数组代码?

python - 如何在 sqlalchemy 中编写 group_concat 函数?