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是的。 –