Python RegEx, чтобы искать комбинацию (а не расположение) заданных слов: возможно ли это? - PullRequest
0 голосов
/ 06 апреля 2020

Я хочу иметь регулярное выражение в Python, которое соответствует набору точно и только этих слов, разделенных любым количеством пробелов: Алекс, Бен, Кэрол, Дэвид. Приведенные ниже примеры (каждая строка является отдельной тестовой строкой):

Alex Ben Carol David
David Alex Carol Ben
Carol   David    Ben  Alex
Alex Ben Carlos Dave
Anthony Ben Carol Dave
Alex Carol David
Ben

Первые 3 тестовые строки соответствуют всей строке, в то время как другие не имеют совпадений. Возможно ли использовать только регулярные выражения? Если нет, то как мне объединить это с Python?

Я попытался изменить ответ Ωmega на мой предыдущий вопрос следующим образом: ^(?=.*Alex)(?=.*Ben)(?=.*Carol)(?=.*David)(?:.*(?:$|\s+)){4}$, но это не сработало очень хорошо.

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

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

^(?=.*\bAlex\b)(?=.*\bBen\b)(?=.*\bCarol\b)(?=.*\bDavid\b).*$

См. regex demo .

Обновление в соответствии с определенным c требованием, чтобы только перечисленные слова могли присутствовать в строке:

/
^
# Make sure the line only consists of targeted words.
(?=
    # First word.
    (?:Alex|Ben|Carol|David)
    # Three more words until the end of line.
    (?:[ \t]+(?:Alex|Ben|Carol|David)){3}$
)
# Make sure all four required words are present.
(?=.*\bAlex\b)(?=.*\bBen\b)(?=.*\bCarol\b)(?=.*\bDavid\b)
# Now match the line if all assertions were true.
.*
$
/x

См. regex demo .

Разделение строки и последующее сравнение с помощью строковых функций или словарей, вероятно, было бы более производительным подходом.

0 голосов
/ 06 апреля 2020

Вы можете попробовать грубое простое решение, сгруппировав все свои возможности в подборке: (Alex|Ben|Carol|David)*\s*

попробуйте здесь: https://regex101.com/r/MDoAgW/2

я не уверен относительно того, что ваш точный вопрос, хотя. Надеюсь, это поможет.

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