Регулярное выражение ниже:
[a-z]+[\\.\\?]
... это не регулярное выражение, а строка (которая может быть шаблоном для регулярного выражения; вы можете построить REнапример, передавая re.compile
).
Почему \\
косая черта используется дважды вместо одного?
Возможно, вы неправильно понимаете, что происходитon ...:
>>> s = '[a-z]+[\\.\\?]'
>>> s
'[a-z]+[\\.\\?]'
>>> print(s)
[a-z]+[\.\?]
Вы вводите \
дважды в каждом случае, чтобы первый "уклонился" от второго, то есть остановил его отформирование "escape-последовательности" со следующим следующим символом.Вы видите дважды, когда смотрите на строку repr
(это то, что показывает вам интерактивная оболочка Python, когда вы просто вводите в ее подсказке имя, к которому относится объект строки).Но вы видите это только один раз, когда вы просто смотрите на строку, например, с print
- сама строка не имеет дубликатов, вы, вероятно, просто смущены «вводом дважды» и «отображением дважды» (в repr
) функций.
Другой удобный способ ввода точно такого же строкового значения, также как и литерала:
>>> z = r'[a-z]+[\.\?]'
>>> z
'[a-z]+[\\.\\?]'
>>> print(z)
[a-z]+[\.\?]
>>> z == s
True
Префикс r
(для «raw literal») означает, чтони одна из следующих обратных косых черт не считается частью escape-последовательности - каждая из них стоит сама за себя, поэтому дублирование не требуется.
Обратите внимание, что z
ведет себя точно так же, как s
и действительно равно ему:ведущий r
делает , а не создает «строки другого типа», просто предлагает удобный способ ввода строк с множеством обратных косых черт, не удваивая их (это предназначено для облегчения ввода буквенных строк, обозначаемых какшаблоны регулярных выражений; r
альтернативно может восприниматься как «шаблон регулярных выражений»: -).