Regex Необязательно Условное Точное соответствие? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть регулярное выражение, которое выглядит так:

(?<Number>\d{3})-?(?<Hand>R?L?)[-\s]?(?<Description>.*?)?(?<ShnOpp>SHN|OPP)?$

С некоторыми примерами данных:

104-RL-BLAH BLA SHN
104-RL FOO OPP
102-RL-BAR WL74
102-BAR WL74
102-R-BAR WL74 SHN
102-R-BAR WL74 OPP

Итак, именованная группа Hand может содержать RL|R|L|{Blank}.

Но, если и только если, Hand="RL" я хочу сопоставить ShnOpp с SHN|OPP, в противном случае просто оставьте это как часть описания.Итак, могу ли я выполнить буквальное условие IF в своем регулярном выражении?

Либо мои навыки поиска в Google подвели меня, либо, может быть, вы просто не можете этого сделать, но я бы хотел оказаться ошибочным.

Вот ссылка на рабочий образец: https://regex101.com/r/wGghbV/2

1 Ответ

0 голосов
/ 07 мая 2019

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

(?<Number>\d{3})-?(?<Hand>(?<RL>RL)|[RL]?)[ \-]?(?<Description>.*?)[ \-]?(?(RL)(?<ShnOpp>SHN|OPP)?)$

Ваш обновленный образец: https://regex101.com/r/wGghbV/3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...