带有交替的正则表达式中的转义括号

问题描述

我正在尝试编写一个 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)。

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

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

解决方法

问题在于,当 \b 前面有 ) 时,它无法按照您想要的方式匹配单词边界。 word boundary 是与非单词字符或字符串结尾相邻的单词字符。单词字符是字母、数字或下划线;值得注意的是,) 不是单词字符。这意味着 )\b 不会匹配后跟空格的括号,也不会匹配字符串末尾的括号。

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

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

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

\b(?:Orange|Banana|Apple \(Red\)| Apple \(Green\)|Plum|Mango)(?=\W|$)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...