交替使用正则表达式转义括号
Escape brackets in a regex with alternation
我正在尝试编写一个 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) 等带括号的词。
我尝试过使用 \ 进行单转义和使用双转义 (\),但是在测试带有括号的单词时,这两个选项似乎都return不匹配。
我怎样才能同时匹配带括号的单词?
问题是 \b
无法按照您想要的方式匹配前面有 )
的单词边界。 word boundary 是与非单词字符或字符串结尾相邻的单词字符。单词字符是字母、数字或下划线;值得注意的是,)
不是单词字符。这意味着 )\b
不会匹配后跟 space 的括号,也不会匹配字符串末尾的括号。
最简单的解决方法是删除 \b
。你实际上并不需要它们,因为你已经有了 ^
和 $
锚:
^(?:Orange|Banana|Apple \(Red\)| Apple \(Green\)|Plum|Mango)$
或者,如果您想在更大的字符串中搜索,您可以使用 lookahead 来查找非单词字符或字符串结尾。这基本上就是 \b
所做的,除了我们只向前看,而不是向后看。
\b(?:Orange|Banana|Apple \(Red\)| Apple \(Green\)|Plum|Mango)(?=\W|$)
我正在尝试编写一个 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) 等带括号的词。
我尝试过使用 \ 进行单转义和使用双转义 (\),但是在测试带有括号的单词时,这两个选项似乎都return不匹配。
我怎样才能同时匹配带括号的单词?
问题是 \b
无法按照您想要的方式匹配前面有 )
的单词边界。 word boundary 是与非单词字符或字符串结尾相邻的单词字符。单词字符是字母、数字或下划线;值得注意的是,)
不是单词字符。这意味着 )\b
不会匹配后跟 space 的括号,也不会匹配字符串末尾的括号。
最简单的解决方法是删除 \b
。你实际上并不需要它们,因为你已经有了 ^
和 $
锚:
^(?:Orange|Banana|Apple \(Red\)| Apple \(Green\)|Plum|Mango)$
或者,如果您想在更大的字符串中搜索,您可以使用 lookahead 来查找非单词字符或字符串结尾。这基本上就是 \b
所做的,除了我们只向前看,而不是向后看。
\b(?:Orange|Banana|Apple \(Red\)| Apple \(Green\)|Plum|Mango)(?=\W|$)