[英]escaping characters in a regex
正則表達式如下:
[a-z]+[\\.\\?]
為什么\\\\
斜杠使用兩次而不是一次?
正則表達式如下:
[a-z]+[\\.\\?]
...不是一個正則表達式,而是一個字符串(可能是正則表達式的模式;例如,您可以通過將其傳遞給re.compile
為其構建RE)。
為什么
\\\\
斜杠使用兩次而不是一次?
您可能會誤會發生了什么...:
>>> s = '[a-z]+[\\.\\?]'
>>> s
'[a-z]+[\\.\\?]'
>>> print(s)
[a-z]+[\.\?]
分別輸入 \\
兩次,以使第一個“轉義”第二個,即阻止它與下一個下一個字符形成“轉義序列”。 當您查看字符串的repr
時,您會看到兩次(例如,當您在提示符下輸入字符串對象綁定的名稱時,交互式Python shell便會向您顯示)。 但是,當您僅查看字符串(例如使用print
時,您只會看到它一次-字符串本身沒有重復項,您可能只是對“輸入兩次”和“顯示兩次”(在repr
)功能感到困惑。
輸入完全相同的字符串值(也作為文字)的另一種簡便方法:
>>> z = r'[a-z]+[\.\?]'
>>> z
'[a-z]+[\\.\\?]'
>>> print(z)
[a-z]+[\.\?]
>>> z == s
True
r
前綴(用於“原始文字”)意味着以下反斜杠都不被視為轉義序列的一部分-每個反斜杠都代表自己,因此不需要加倍。
需要注意的是z
行為酷似s
,實際上等於它:龍頭r
不會使“不同類型的字符串”,只是提供了一個方便的方式進入,有很多反斜杠的字符串不起來加倍(這是為了便於輸入的文字字符串表示為正則表達式模式; r
也可以表示為“正則表達式模式” :-)。
兩者都.
和?
正在逃脫。
但是,對於正則表達式字符類(在[]
),則不需要。 這將以相同的方式工作:
[a-z]+[.?]
編輯 :通過您的編輯,詢問\\\\
,這取決於。 這個正則表達式是否在""
中的字符串中? 根據語言的不同,有時\\
必須在雙引號內轉義\\
。 但在''
可能不需要。 你從哪里得到的?
第一個逃脫了時期。 第二個逃脫問號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.