2

我正在尝试编写一个 Reg 表达式来匹配单词列表中的任何单词,但在使用带括号的单词时遇到问题。

这是我到目前为止的 reg 表达式:

^\b(?:Civil Services|Assets Management|Engineering Works (EW)|EW Maintenance|Ferry|Road Maintenance|Infrastructure Planning (IP)|Project Management Office (PMO)|Resource Recovery (RR)|Waste)\b$

带有括号的单词(例如 Civil Services)会匹配,但不会匹配带有括号的单词(例如 Engineering Works (EW))。

我尝试过使用 \ 进行单转义和双转义 (\),但是在测试带有括号的单词时,这两个选项似乎都没有返回匹配项。

我怎样才能匹配带括号的单词?

4

1 回答 1

1

问题是当\b单词边界前面带有). 单词边界是与非单词字符或字符串结尾相邻的单词字符。单词字符是字母、数字或下划线;值得注意的是,)不是单词字符。这意味着)\b不会匹配后跟空格的括号,也不会匹配字符串末尾的括号。

最简单的解决方法是删除\bs。你实际上并不需要它们,因为你已经有了^$锚点:

^(?:Orange|Banana|Apple \(Red\)| Apple \(Green\)|Plum|Mango)$

或者,如果您想在更大的字符串中搜索,您可以使用前瞻来查找非单词字符或字符串结尾。\b除了我们只向前看,而不是向后看,这基本上就是这样做的。

\b(?:Orange|Banana|Apple \(Red\)| Apple \(Green\)|Plum|Mango)(?=\W|$)
于 2021-02-17T01:51:34.607 回答