Регулярное выражение соответствует списку подстрок, но исключает список строк, содержащих подстроки - PullRequest
0 голосов
/ 26 января 2019

Я хотел бы найти общий способ настройки регулярного выражения, соответствующего списку подстрок, но исключая список строк, содержащих подстроки.

Например, чтобы соответствовать 'его |ее «но исключить» her_cup |her_table |his_car |его велосипед'.Списки могут быть более или менее случайным образом сформированы.

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Какой движок регулярных выражений?

Обычно это решается путем сопоставления обоих списков того, что нужно / не нужно.
Есть способы сделать это с помощью утверждений, но это не универсально.

Если вы используете PCRE или Perl, вы можете использовать глаголы возврата для skip the
нежелательные вещи автоматически.

Например (?:her_cup|her_table|his_car|his_bik)(*SKIP)(*FAIL)|(?:his|her)

https://regex101.com/r/wv7qPo/1

В противном случае вам придется сопоставить оба цикла и использовать группу захвата в качестве
флаг, чтобы увидеть, если вы подходите.

(?:her_cup|her_table|his_car|his_bik)|(his/her)

Основное правило: вы должны соответствовать чему-то, чтобы пройти мимо него, в противном случае
части нежелательных подстрок могут быть включены в хорошие подстроки.

0 голосов
/ 27 января 2019

Я не дошел до сути того, что вы хотите из-за отсутствия объяснения. из того, что я понимаю, вы должны использовать это регулярное выражение, чтобы ограничить ваш шаблон:

(?<![^\s^,^\.])(his|her)(?![^\s^,^\.])

Объяснение:

(?<![^\s^,^\.]) --> negative look-behind (don't allow symbols other than {space, comma, dot})
(his|her) ---> your atomic words
(?![^\s^,^\.]) ---> negative look-ahead same as the first one 

Демо

Некоторая документация на Regex

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