Строка с регулярным выражением сравнения в python завершается неудачей в python

1

Я пытаюсь сравнить строку с регулярным выражением в python следующим образом:

#!/usr/bin/env python3

import re

str1 = "Expecting property name: line \d+ column \d+ (char \d+)"
str2 = "Expecting property name: line 3 column 2 (char 44)"

print(re.search(str1,str2))

if re.search(str1,str2) :
    print("Strings are same")
else :
    print("Strings are different")

Я всегда получаю следующий вывод

Никто
Строки разные

Я не могу понять, что здесь не так.
Может ли кто-нибудь предложить/указать мне, что с этим не так?

  • 1
    Скобки интерпретируются .
  • 1
    str1 = r"Expecting property name: line \d+ column \d+ \(char \d+\)"
Теги:

1 ответ

2
Лучший ответ

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

str1 = r"Expecting property name: line \d+ column \d+ \(char \d+\)"
#                                                     ^         ^

Обратите внимание: поиск не означает полное совпадение: это просто означает, что подстрока str2 должна соответствовать. Таким образом, вы можете добавить ^ и $ anchors.

  • 0
    Спасибо за ответ, Виллем, поэтому последняя строка регулярного выражения должна быть r"^Expecting property name: line \d+ column \d+ \(char \d+\)$" верно?
  • 0
    @AnkurTank: если вам нужно точное совпадение, да, но если 'foobar Expecting property name: line 123 column 123 \(char 123) qux other nonsense' приемлемо, то, конечно, вы можете опустить якоря. Это зависит от того, что вы хотите.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню