【问题标题】:Regex: find from a vast list of words, only whole words正则表达式:从大量单词列表中查找,仅查找整个单词
【发布时间】:2019-08-21 00:37:20
【问题描述】:

我有一个很长的文本,我想在这个文本中找到一长串单词。

现在,要搜索这些词,我检查“正则表达式”,然后找到“word1|word2|word3|word4...” 这样做的问题是,如果其中一个词是“吃”,那么每个包含“吃”的词也会被突出显示。我怎样才能防止这种情况发生?

【问题讨论】:

标签: regex


【解决方案1】:

您可以使用单词锚来匹配单词的开头和结尾。 (假设您使用的是支持 PCRE 的东西。)

/\b(word1|word2|word3...)\b/

\b 位匹配“字边界”。来自 Perl 的正则表达式手册页 (man perlre)

单词边界(“\b”)是两个字符之间的一个点,它的一侧有一个“\w”,另一侧有一个“\W”(以任意顺序),计算字符串开头和结尾的虚构字符与“\W”匹配。

【讨论】:

  • 我收到错误“错误的正则表达式:编译正则表达式时出错”(没关系,现在发生的情况是什么都没有找到,而结果肯定会显示出来。)
  • 你用的是什么工具? grep?这是在程序内部吗?什么语言?您可以访问哪些库?
  • 如果您的正则表达式在字符串中,您可能还想尝试转义反斜杠:"\\b(word1|word2)\\b"。同样,这取决于您使用的工具/语言。
  • 我在 Windows 上使用 notepad++,在 Linux 上使用 geany。它不适用于其中任何一个。
  • 尝试将正斜杠 (/) 从前面和后面去掉。只是玩它。 (正斜杠通常用于分隔许多语言中的正则表达式——可能不是您的编辑器使用的)
猜你喜欢
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
相关资源
最近更新 更多