首页 > 解决方案 > 正则表达式匹配一些单词,不包括带点的字符串

问题描述

匹配"Colorado", "Co", or的正则表达式是什么"CO",不包括包含句点的字符串,例如"Co."or "co."

这:

/\b(Colorado|Co|CO)\b/i

匹配 的两个实例"CO"。如何排除包含点的匹配项?

这:

\b(?:(?!Co\.)\w)+\b

忽略"Co.",但我不知道如何将它与允许的关键字结合起来。

标签: rubyregex

解决方案


您可以在之后添加一个否定的前瞻Co

/\b(Colorado|Co(?!\.))\b/i
               ^^^^^^

查看Rubular 演示

注意我省略co了替代,因为您使用的是不区分大小写的i修饰符,它Co等于co.

另一种方法是在第一个之后的组之前添加负前瞻\b

/\b(?!Co\.)(Colorado|Co)\b/i
   ^^^^^^^^ 

查看另一个 Rubular 演示

在这里,\b断言单词边界的位置,然后(?!Co\.)如果Co.是当前位置右侧的文本,则匹配失败,并且(Colorado|Co)\b匹配整个单词Coloradoor Co

请注意,如果您手动编写模式,您可能会进一步缩短模式,例如

/\b(?!Co\.)Co(?:lorado)?\b/i

推荐阅读