x = r'\[GOOD\]'
print(len(x)) # prints 8
print(x[0]) # prints a backslash
字符串中有反斜杠。
但是,该模式与反斜杠不匹配。在正则表达式中,反斜杠修饰它后面的内容;在此示例中,反斜杠禁用[
.
所以你的正则表达式只匹配文字字符串[GOOD]
。但是x
由于反斜杠,您的不包含该字符串。
如果您希望您的目标字符串只包含[GOOD]
然后删除反斜杠:
y = r'it made me feel [GOOD]'
如果您希望搜索字符串匹配目标字符串中的反斜杠,您必须修改您的模式。这会起作用:
x = r'..GOOD..' # use dot to match anything
但要真正匹配正则表达式中的反斜杠,请使用双反斜杠。反斜杠是一个特殊字符,它会修改它后面的字符,因此要获得反斜杠,请将其加倍:
x = r'\\.GOOD.\\' match actual backslashes; use dot to match square braces
因此,您使用\\
匹配反斜杠以及\[
左方括号和\]
右方括号。把它们放在一起:
x = r'\\\[GOOD\]\\'
但是您在这里没有使用正则表达式的任何特殊功能。这只是一个匹配一个文字字符串的正则表达式。
顺便说一句,Python 的“原始字符串”特性在这里很方便。在普通字符串中,您需要将反斜杠加倍以获得单个反斜杠,就像在模式中您需要将反斜杠加倍以匹配反斜杠一样。因此,要使用普通字符串编写模式,您需要将反斜杠加倍:
x = '\\\\\\[GOOD\\]\\\\' # note not a raw string
呸!