Я начинаю изучать Regex в Python. Покопавшись некоторое время на этом сайте, я обнаружил, что при анализе «паттернов» есть двухслойные (движок Python и Regex по отдельности). Например, если шаблон = "\b", то он будет пониматься как "Backspace" перед "Соответствует, если указанные символы находятся в начале или конце слова".
А как насчет части str
? Например в re.search(pattern, str)
? Часть "str"
тоже проходит через два слоя? Или он проходит только через движок Python?
Пример кода:
match = re.search("\\b","\\b") #return True
Вот как я это понимаю, пожалуйста, проверьте, прав ли я:
pattern
"\\b"
, после движка Python он становится "\b"
, затем переходит к движку регулярных выражений, он становится «Соответствует, если указанные символы находятся в начале или конце слова».str
"\\b"
, после движка Python он становится "\b"
и все, это просто "\b"
(косая черта и символ «b»). Я прав?@ Виктор Стрибижев Спасибо. Могу я спросить, правильно ли я понимаю строку match = re.search("\\b","\\b")? Первый \\b - это «Соответствует пустой строке, но только в начале или конце слова», как объяснение в документе регулярного выражения, второй \\b - это просто «\b», верно?
Я уже предоставил ссылки, объясняющие это. Кто-то снова открыл обман. У вас есть две границы слов в строке \b
, почему вы не ожидаете совпадения в строке '\\b'
?
Вы страдаете от вопиющего непонимания того, как работает Stack Overflow. Простое редактирование вопроса не дает вам права задавать вопросы в ответ; вы должны убедить других пользователей, что вопрос качественный. Преобразование решений в вопросы не является ответом.
Выясните, что часть str — это просто буквальное значение str. Я тестирую его простыми 2 строками кода.
print(re.search("abcd","....")) #None
print(re.search("....","abcd")) #Match
Как видите, "...."
в части шаблона обрабатывается регулярным выражением, а "...."
в части str — нет.
Слоев нет, есть простой текст и представление текста в коде (т.н. строковые литералы). Шаблоны регулярных выражений — шаблоны простого текста, и их просто нужно правильно представить в коде. Здесь нет проблемы с регулярным выражением, просто снова Запутался в обратных косых чертах в регулярных выражениях.