повторный поиск и связывание нескольких условий, python3 - PullRequest
2 голосов
/ 28 февраля 2020

У меня есть набор для поиска нескольких символов.
Однако моя функция должна возвращать "true", если все условия выполнены.
Я хотел бы использовать "регулярные выражения", если это возможно.

Набор может быть:

set_a = {'B', 'C', 'b', 'c'}
set_b = {'B', 'C', 'a', 'f', 'g', 'c', 'd'}
set_c = {'A', 'G', 'D', 'F', 'b', 'e'}
...

Моя функция для поиска некоторых символов выглядит следующим образом:

if re.search("[a]", set_a) and re.search("[b]", set_a) and re.search("[c]", set_a):  
        return True

В дальнейшем, если в запросах я хочу искать другие
Мне не нравится ссылка and-link между моими выражениями.
Есть ли способ найти, например, [a] [b] [c] только в одном выражении?
У меня нет нашел что-нибудь в документации или здесь, но я уверен, что есть что-то довольно простое. Я полный новичок. Заранее спасибо

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

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

/(?=.*a)(?=.*b)(?=.*c)(?=.*d)/

Вам потребуется использовать Python методы для формирования регулярного выражения. В Ruby это можно сделать следующим образом.

list = ['a', 'b', 'c', 'd']
s = list.each_with_object('') { |c,s| s << "(?=.*#{c})" }
  #=> "(?=.*a)(?=.*b)(?=.*c)(?=.*d)"
Regexp.new(s)
  #=> /(?=.*a)(?=.*b)(?=.*c)(?=.*d)/

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

1 голос
/ 28 февраля 2020

Я не уверен, почему вы используете re.search() для этого, это для поиска шаблонов в строке, а не в списке.

Вы можете использовать функцию all():

if all(c in lit_list for c in "abc"):
    return True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...