将单词从列表组合到带有单词边界的单个正则表达式

在石头上

我有一个清单 l = [AA, CC, DD, EE]

而且我从文件中有很多字符串,我想从列表中查找包含任何确切单词的字符串。我不想获取与特定字符串匹配的单词。阅读其他SO问题,我得到的建议主要是通过以下两种方式将列表合并为一个正则表达式

1. \bAA\b|\bCC\b|\bDD\b|\bEE\b     ==> r"\b%s\b" % r"\b|\b".join(l)
2. \b(?:AA|CC|DD|EE)\b             ==> r"\b(?:%s)\b" % "|".join(l)

上面右边提到的连接只是一个示例,并不是问题的一部分。

运行代码,它们都给出相同的正确答案,而timit给出相似的时序。如果我不在乎列表中匹配的单词,是否像选项2一样需要分组?为什么选项2的末尾有字边界?这是否意味着它适用于括号内的所有单词,即等价于(?:\bAA\b|\bCC\b|\bDD\b|\bEE\b)谁能指向一个提到括号属性的链接?这两个选项中的任一个是否更正确/ pythonic?

蒂姆·比格莱森(Tim Biegeleisen)

这两个版本在逻辑上是相同的,应产生相同的结果,并且还应具有相似的性能。您实际应该使用的版本是第二个版本:

\b(?:AA|CC|DD|EE)\b

原因是它更简洁,并且避免了不必要地为每个术语重复单词边界。这个正则表达式表示匹配交替中的任何一个术语,两端带有单词边界。关于“组”,?:括号内的内容实际上关闭了捕获组,因此至少从性能的角度来看,它实际上并不存在。需要使用括号,以避免为每个术语重复单词边界,这是第一个版本所做的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式单词边界

正则表达式-单词边界

正则表达式:任何单词和数字组合,但带有下划线

使用正则表达式的单词边界-无法提取所有单词

使用正则表达式将单词隔离到带有分隔符的文本

正则表达式与单词边界的并集

Lucene正则表达式中的单词边界

正则表达式@单词边界中的字符

标签和单词的边界正则表达式

用Bash正则表达式匹配单词边界

正则表达式锚 \< 与 \b 用于单词边界

正则表达式单词边界混乱

与单词列表不匹配的单词的正则表达式

匹配单词正则表达式列表中的单词

正则表达式 - 匹配任何单词和(保留的)空格,将括号视为单个单词

正则表达式匹配带有撇号的单词和单词

正则表达式检查单词和带有空格分隔字母的单词

正则表达式:在.scss之前排除带有单词-map的单词

JavaScript正则表达式将单词的边界与变音符号匹配

正则表达式将单词边界字符串与括号匹配

什么是正则表达式,它将返回带有特殊字符即|的单个单词名称。(管)

使用正则表达式组合R中的单词

一个正则表达式,用于制作带有单词边界的首字母缩略词并删除单词前面的字符

具有单词边界要求的JavaScript正则表达式

有关python中单词边界的正则表达式模式

正则表达式匹配单个单词

正则表达式:如何匹配单词列表(允许组合)?

如何在正则表达式的嵌套项目符号列表中搜索单词的组合?

正则表达式将所有大写单词与以大写开头的单词分开