Проблема с экранированной антисла sh перед экранированной квадратной скобкой в ​​регулярном выражении - PullRequest
1 голос
/ 22 апреля 2020

У меня проблемы с сопоставлением регулярных выражений, когда у меня есть антисла sh, вышедшая из-под квадратной скобки

import re

def test_regex(test_number, regex_to_test, string_to_test):
    if re.match(regex_to_test, string_to_test) is None:
        print("Test #{0} FAILED ! Returned value was None".format(test_number))
    else:
        print("Test #{0} OK".format(test_number))

#              REGEX APPLIED   STRING        REAL STRING
test_regex(0, "\\\{\\\}",     "\\{\\}")     # \{\}
test_regex(1, "\\\{\\\\\\\}", "\\{\\\}")    # \{\} or :\{\\} ???
test_regex(2, "\\\{\\\\\\\}", "\\{\\\\}")   # \{\\}
# Now we replace in test '{' and '}' respectively by '[' and ']'
test_regex(3, "\\\[\\\]",     "\\[\\]")     # \[\]
test_regex(4, "\\\[\\\\\\\]", "\\[\\\]")    # \[\] or :\[\\] ???
test_regex(5, "\\\[\\\\\\\]", "\\[\\\\]")   # \[\\]
# Extra incomprehensible
test_regex(6, "\\\{\\\}",     "\{\}")       # {}
test_regex(7, "\\\\{\\\\}",   "\{\}")       # {}
# Now we replace in test '{' and '}' respectively by '[' and ']'
test_regex(8, "\\\[\\\]",     "\[\]")       # []
test_regex(9, "\\\\[\\\\]",   "\[\]")       # []

Вывод:

Test #0 OK
Test #1 OK
Test #2 OK
Test #3 FAILED ! Returned value was None
Test #4 FAILED ! Returned value was None
Test #5 FAILED ! Returned value was None
Test #6 OK
Test #7 OK
Test #8 FAILED ! Returned value was None
Test #9 FAILED ! Returned value was None

Зачем переходить с '{ 'и'} 'на' ['и'] 'изменить все?

Как я могу отредактировать свое регулярное выражение, чтобы тесты # 3 и # 4 работали как' {'и'} '?

1 Ответ

0 голосов
/ 22 апреля 2020

В python, в простой строке двойная обратная косая черта sh интерпретируется как одиночная.

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

test_regex(3, r"\\\[\\\]",     "\\[\\]")

Вывод:

Test #3 OK
...