Почему эти два регулярных выражения (одно с переменной) не эквивалентны? - PullRequest
0 голосов
/ 29 декабря 2018

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

regex = r"(https:\/\/www\.snopes+...+?)(&)"
matches = re.findall(regex, soup, re.MULTILINE)

Я решил, что хочу заменить "snopes" на переменную, поэтому я создал следующее, которое не работает:

    fact_checker = "snopes"

    regex1 = 'r"(https:\/\/www\.'

    regex2 = '+...+?)(&)"'

    regex3 = regex1 + fact_checker + regex2

    matches = re.findall(regex3, soup, re.MULTILINE)

Как регулярное выражение и регулярное выражение 3 не идентичны?Когда я их распечатал, они выглядят одинаково.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Вы делаете очень распространенную ошибку, полагая, что префикс r является частью значения.Это не;он просто сообщает интерпретатору Python, какой тип цитирования используется в следующей строке.(Возможно, сравните с тем, как 0.0L - это число в C; суффикс L говорит, что это номер типа хранения long.)

В любом случае, идиоматический способ сделать то, что вы хотите, это

regex = r"(https://www\.{}+...+?)(&)".format(fact_checker)

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

0 голосов
/ 29 декабря 2018

Я понял это:

regex1 = r"(https:\/\/www\."

regex2 = r"+...+?)(&)"

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