Python Regex (поиск нескольких значений в одной строке) - PullRequest
4 голосов
/ 17 июля 2010

В регулярном выражении Python, как мне сопоставить большую строку текста и флаг, если любое из значений регулярного выражения совпадает ... Я пробовал это с "|" или заявления, и я попытался сделать список регулярных выражений .. ни работал для меня .. вот пример того, что я пытаюсь сделать с или ..

Я думаю, что мое "или" закомментировано

patterns=re.compile(r'[\btext String1\b] | [\bText String2\b]')   

if(patterns.search(MyTextFile)):
     print ("YAY one of your text patterns is in this file")

Приведенный выше код всегда говорит, что он совпадает, независимо от того, появляется ли строка, и если я немного ее изменяю, я получаю совпадения с первым регулярным выражением, но никогда не проверяю второе .... Я считаю, что это потому, что «Raw» комментирует из моего или заявления, но как бы я обойти это ??

Я также пытался обойти это, убрав выражение «Raw» и добавив двойную косую черту к моему \ b для выхода, но это тоже не сработало :(

patterns=re.compile(\\btext String1\\b | \\bText String2\\b)   

if(patterns.search(MyTextFile)):
     print ("YAY one of your text patterns is in this file")

Затем я попытался сделать 2 отдельных необработанных утверждения с помощью или, и интерпретатор жалуется на неподдерживаемые операнды str ...

patterns=re.compile(r'\btext String1\b' | r'\bText String2\b')   

if(patterns.search(MyTextFile)):
     print ("YAY one of your text patterns is in this file")

Ответы [ 3 ]

7 голосов
/ 17 июля 2010
patterns=re.compile(r'(\btext String1\b)|(\bText String2\b)')   

Вы хотите группу (необязательно захват), а не класс персонажа. Технически, вам здесь не нужна группа:

patterns=re.compile(r'\btext String1\b|\bText String2\b')   

также будет работать (без захвата).

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

Должно быть понятно, откуда возникла ошибка "неподдерживаемые операнды str". Вы не можете ИЛИ строки, и вы должны помнить | обрабатывается до того, как аргумент доходит до compile.

0 голосов
/ 17 июля 2010

В шаблоне RE квадратные скобки [ ] обозначают «класс символов» (в зависимости от того, что внутри них: «любой из этих символов» или «любой символ, кроме одного из них», последние указывают с помощью каретки ^ как первый символ после открытия [).Это то, что вы выражаете, и это не имеет абсолютно никакого отношения к тому, что вы хотите - просто снимите скобки, и все будет в порядке; -).

0 голосов
/ 17 июля 2010

Эта часть [\ btext String1 \ b] означает, что есть «разделитель слов» или одна из букв в «text String1». Так что это соответствует ничему, кроме пустой строки, я думаю.

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