我正在寻找一个正则表达式,可以简化不使用OR正则表达式的情况-|
,因为我只想要一个捕获组。
规则应匹配行x
开头的任何内容,并在其后有一个空格,然后在()中使用一个大写字母。
或者匹配行首()中大写字母的任何内容。
^\(([A-Z])\)|^x \(([A-Z])\) # works with |
x (A) should match A
(B) should match B
should not match (Z)
x should (A) not match
答案 0 :(得分:1)
只需将x
和空格字符放在一个非捕获组中,并使用?
quantifier将其设置为可选:
^(?:x )?\(([A-Z])\)
或者,您仍然可以使用|
运算符,但如果使用正数Lookbehind,则只有一个捕获组:
(?<=^x |^)\(([A-Z])\)
Demo 。
您甚至可以更进一步,完全摆脱捕获组的束缚,如果愿意,可以将大写字母作为整个比赛的内容
(?<=^x \(|^\()[A-Z](?=\))
Demo 。
但是那太过分了。我会选择第一个解决方案。