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
Yuck!
所以你可以使用多个转义逃避? –
@ paulie.jvenuez是的。 –