Как сопоставить необязательную строку в начале? - PullRequest
0 голосов
/ 31 марта 2019

Я ищу регулярное выражение, которое упростит то, что у меня нет, без использования регулярного выражения ИЛИ - |, потому что я хочу только одну группу захвата.

Правила должны соответствовать чему-либо в началестроки, которая представляет собой 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

1 Ответ

1 голос
/ 31 марта 2019

Просто поместите x и символ пробела в группу без захвата и сделайте его необязательным, используя квантификатор ? :

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

Вот демонстрационная версия .

В качестве альтернативы, вы все равно можете использовать оператор |, но иметь только одну группу захвата, если вы используете положительный Lookbehind :

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

Демонстрация .

Вы даже можете сделать еще один шаг и полностью избавиться от группы захвата, просто указав заглавную буквувесь матч, если хотите:

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

Демо .

Это было бы излишним.Я бы пошел с первым решением.

...