использование нескольких переменных с регулярным выражением в python - PullRequest
0 голосов
/ 08 мая 2020

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

s = "These are oranges and apples and pears, but not pinapples or .."
r = re.compile(r'\bAND\b | \bOR\b | \bNOT\b', flags=re.I | re.X)
r.findall(s)
['and', 'and', 'not', 'or'] #result

В этом коде они используют точное строковое значение «И» или «НЕТ». Что мне делать, если у меня есть что-то вроде этого,

a = 'AND'
b = 'OR'

(я получаю эти строковые значения, запустив al oop) В этом коде они используют '| (или) ' и re.findall () , что мне делать, если мне нужно искать как a, так и b. и использовать re.search ()

Примечание: Думаю, мне нужно использовать r'\bfoo\b', потому что иногда мои совпадения будут такими ... 'foo.', '(foo)''cod.foo' из-за этого я не могу использовать условие вроде if a in s: (or) if a and b in s:. Пожалуйста, дайте несколько предложений по работе над этим, спасибо.

Ответы [ 3 ]

1 голос
/ 08 мая 2020

Возможно, я не знаю, что вы собираетесь делать, но если вы собираетесь использовать переменные внутри регулярного выражения, помните, что регулярное выражение перед отправкой в ​​re.compile - это просто простой текст. Таким образом, вы можете делать с ним все, что вы можете делать с такими текстами, как:

re.compile(f"\\b({a}|{b})\\b")

или в более старых версиях python:

re.compile("\\b(" + a + "|" + b + ")\\b")

Вы не ограничены использованием r"text" для определения шаблоны регулярных выражений.

1 голос
/ 09 мая 2020

Если вы хотите искать обе переменные, вы можете дважды вызвать re.search Что-то вроде этого...

if((re.search(rf"\b(?=\w){(a)}\b(?!\w)", s, re.IGNORECASE)) and (re.search(rf"\b(?=\w){(b)}\b(?!\w)", s, re.IGNORECASE))): 

Надеюсь, это поможет

0 голосов
/ 08 мая 2020

Думаю, вам нужно что-то вроде этого, а также добавить флаг «без учета регистра»:

pattern = '\b(and|or|not)\b'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...