#regex-lookarounds #regex-negation
#регулярное выражение-поиск #регулярное выражение-отрицание
Вопрос:
У меня есть следующее регулярное выражение
(?!.*internal).*auditor['’s]*.*(?=report)|(?!.*internal)(?<=report).*auditor['’s]*.*
и следующие тестовые примеры
report of auditor
report of external auditor
auditor external report
in auditor report
auditor report
internal report of auditor
report of internal auditor
auditor internal report
Я хочу сопоставить, есть ли оно report
до или после auditor['’s]*
, но я не хочу сопоставлять, если слово internal
представляет
будет сопоставлено с моим приведенным выше регулярным выражением internal report of auditor
.
Вот желаемый результат
report of auditor
report of external auditor
auditor external report
in auditor report
auditor report
Комментарии:
1. Что значит, вы не хотите сопоставлять строку. В них есть три строки с «internal».
2. Кроме того, не просто «отчет» перед или после «auditior», а скорее «отчет» после «auditor’s», или «отчет» перед «auditor» (без «s»)?
3. @ Bohemian ♦, 1. Я не хочу сопоставлять эти три строки; 2. это до или после
auditor
с или без's
4. Хорошо, значит,
's
не имеет значения.
Ответ №1:
"'s"
Суффикс к "auditor"
кажется неуместным, поэтому удалите это ненужное усложнение.
Ваше требование может быть выражено как:
- содержит
"auditor"
- содержит
"report"
(потому что «до или после чего-то» просто означает «содержит» — «что-то» не имеет значения) - не содержит
"internal"
Вводим это в регулярное выражение:
^(?!.*binternalb)(?=.*breportb).*bauditorb.*
Я установил границы слов ( b
) вокруг терминов, так что, например, «интернализация» и «отчетность» не совпадают.
Смотрите живую демонстрацию, показывающую, что это соответствует всем, кроме последних 3 строк вашего образца ввода.