Вот вопрос, который быстро сводит меня с ума. Я хочу удалить символы ' и из строки. Я хочу использовать re.sub для этого (потому что я пытаюсь сравнить re.sub и str.replace, поэтому я хочу сделать это в обоих направлениях). Теперь мое понимание необработанных строк заключается в том, что escape-символы обрабатываются как литералы, ЕСЛИ они не экранируют символ, открывающий строку. Итак, у меня есть две идеи, как это сделать:
# Method 1: concatenate strings that have different enclosing characters
>>> REGEX1 = re.compile(r"[" + r'"' + r"'" + r"]")
>>> REGEX1.pattern
'["\']'
# Method 2: Try to escape one of the quotation characters
>>> REGEX2= re.compile(r"[\"']")
>>> REGEX2.pattern
'[\\"\']'
Приведенные узоры ВЫГЛЯДЯТ по-разному. Хотя они? Я проверяю, ведут ли они себя одинаково в регулярном выражении:
>>> test_string = "hello ' world \" "
>>> test_string
'hello \' world " '
>>> result_1 = REGEX1.sub(r'', test_string)
>>> result_2 = REGEX2.sub(r'', test_string)
>>> result_1
'hello world '
>>> result_2
'hello world '
>>>
Моя интуиция подсказывает мне, что возможно одно из двух:
- '[']' == '[\']'
- '[']' != '[\']', но будет вести себя аналогично при обработке как регулярное выражение.
Тогда последний тест:
>>> '["\']' == '[\\"\']'
False
Итак, 2) выше правильное утверждение? Можете ли вы помочь мне понять, что происходит?