У меня много текстов в списке, и я хочу сделать расширенный поиск по этим текстам, чтобы найти конкретные записи. Например, я хочу ввести текстовое поле, например, следующие запросы: '(aaa или bbb) и (ccc или ddd или eee)', и я хочу найти соответствующие записи списка, содержащие эти критерии.Поиск в строке из логического выражения в python
Так что мой метод поиска будет делать что-то вроде этого:
# '(aaa or bbb) and (ccc or ddd or eee)'
results = []
for text in textlist:
if (text.find('aaa') != -1 or text.find('bbb') != -1) and (text.find('ccc') != -1 or text.find('eee') != -1 or text.find('fff') != -1):
results.append(text)
Я не знаю, как разобрать мой поиск и преобразование его, если заявление со многими методами найти.
Во-первых, есть ли лучший способ кодировать мой поиск? более оптимизирован? с библиотекой? Во-вторых, как разобрать поиск? и как построить if?
Я использовал Pyparsing nestedExpr метода для разбора моего запроса, и я получил этот список: [[ 'AAA', 'или', 'BBB'], 'и', [ 'CCC', 'или', 'ddd', 'or', 'eee']]
Вопрос в том, как его проанализировать и получить эффективный поиск? например, регулярное выражение?
редактировать:
ОК, так что я есть это выражение: «а или (б или в) и (д или е или е, или г) или ч нет (я или к)»
И вот, я получаю эту структуру: ['a', 'or', ['b', 'or', 'c'], 'and', ['d', 'or', 'e', 'или', 'f', 'или', 'g'], 'или', 'h', 'not', ['i', 'or', 'j']]
Как я могу проанализировать это, чтобы создать регулярное выражение? Есть ли простой способ поиска всех этих терминов, кроме регулярного выражения? потому что это, кажется, трудно построить регулярное выражение ...
Вы захотите изучить [регулярные выражения] (https://en.wikipedia.org/wiki/Regular_expression), доступные в Python через модуль '' re' '(https://docs.python.org /3/library/re.html). – kazemakase
Регулярные выражения это звонит колокол? –
Я не знаю, как преобразовать строку типа '(aaa или bbb) и (ccc или ddd или eee)' в регулярное выражение ... ' – emurb