簡體   English   中英

在正則表達式中轉義字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM