如何在开头匹配可选字符串?

问题描述 投票:0回答:1

我正在寻找一个正则表达式,这将简化我没有使用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
regex pcre
1个回答
1
投票

只需将x和空格字符放在非捕获组中,然后使用? quantifier将其设置为可选:

^(?:x )?\(([A-Z])\)

Here's a demo

或者,您仍然可以使用|运算符,但如果使用正Lookbehind,则只有一个捕获组:

(?<=^x |^)\(([A-Z])\)

Demo

您甚至可以更进一步完全摆脱捕获组,如果您愿意,只需将大写字母作为整个匹配:

(?<=^x \(|^\()[A-Z](?=\))

Demo

那将是一个过度杀伤力。我会选择第一个解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.