golang 正則 反斜槓_Python Re:正則表示式
阿新 • • 發佈:2021-01-30
技術標籤:golang 正則 反斜槓
特殊字元:
:匹配字串的開始 :匹配字串的結束 :匹配除卻 之外的一切字元 :轉義字元 :A 或者 B,非貪心匹配,順序從左往右 :一次或者多次,貪心匹配 :任意次數,貪心匹配 :零次或者一次,貪心匹配。如果出現在 , , 之後表示非貪心匹配 :m 次 :m 到 n 次,貪心匹配 :非貪心匹配特殊字元:
:包括大小寫英文字母,數字和下劃線 :除卻 之外的所有字元 :0-9 數字 :除卻 之外的所有字元其餘還有
, 和 。集合:
- 集合只匹配一個字元,集合中的元素是並列的,比如 匹配 或者 或者 ;
- 區間用 表示,比如 會匹配所有小寫字母。如果要表示字面意義上的 ,要麼它前面加上 ,要麼它位於第一個或者最後一個: 或者 或者 ;
- 除卻 之外的特殊字元(除例外 , , )失去它們原有的意義,只表示本來的字面字元;
- 轉義字元依然有效;
- 如果位於第一個位置表示除卻後面字元的所有字元,如果不在第一個位置就是字面含義;
- 在集合中如果要表示字面意義上的 需要使用 ,或者將其置於第一個位置。
組:
:中的內容表示一個組。如果要匹配字面意義上的圓括號,使用 和 或者 和 ,在之後可以用 表示第一個組,第二個組的內容。 :並不匹配字元,表示 ,比如 表示忽略大小寫匹配。 :表示一個名字叫做 的組,它後續可以以這樣的方式被使用:- 在同一個模式字串中: 或者
- 通過匹配物件 : 或者
- 在 函式的換成的字串中: , ,
字串:
字串有兩種,一種是
普通字串和 原始字串,它們的區別在於轉意義符號的處理上。1. 普通字串:
首先需要說明的是
是非法的,為了表示一個反斜槓,需要使用 來轉義,轉義的組合有:a b f n
N r t u
U v x
0 1 1 2
3 4 5 6
7
而其餘的所有情況都被自動的理解為反斜槓加上字元,比如
被理解為 ,長度為兩個字元,並 字元轉義。所以為了表示特殊字元中的數字
,我們可以使用 或者 ,這兩者是一模一樣的。In : "d" == "d"
Out: True
比較難以理解的是數字表示的組的處理,為了表示第一組,我們需要使用
,這裡需要兩個反斜槓,因為一個反斜槓是轉義字元。但是為了表示第八組,我們就既可以使用 也可以使用 ,這一點是比較奇怪的。如果在表示特殊字元時,你不清楚是否被反斜槓轉義了,最安全的使用特殊字元的方式是使用兩個反斜槓。
注意到反斜槓在正則表示式中有兩個特殊作用:
- 是否表示轉義 - 如果不是就代表字面的反斜槓
- 是否表示特殊字元
因此為了匹配
這個字串我們需要使用 來表示,比如:In : re.fullmatch("", "")
Out: <re.Match object; span=(0, 1), match=''>
很容易引起困惑的是在第一次和第二次解析中都有意義的情況,比如
,在正則表示式中 和 都表示換行,但是它們實實在在是兩個不同的字串:In : "n" == "n"
Out: False
In : re.fullmatch("n", "n")
Out: <re.Match object; span=(0, 1), match='n'>
In : re.fullmatch("n", "n")
Out: No output
2. 原始字串
可以看到普通字串轉義符號需要兩次解析,這對會給書寫帶來很大的麻煩,這就是引入原始字串的初衷。原始字串中的一個反斜槓代表字面意義上的反斜槓,沒有轉義的意思。也就是說,原始字串等於把其中的一個轉義字元替換成兩個轉義字元的普通字元。比如下面的結果都為
。r"1" == "1"
r"n" == "n"
r"" == ""
所以
, , 都是相同的, , , 都是相同的,但是 , , 中後兩個相同和第一個不同。唯一的例外在於反斜槓跟著單引號或者雙引號時反斜槓會轉義後面的引號,但是反斜槓依然保留,比如
表示 兩個字元,也就是說:r""" == r'"' == """ == '"' == '"'
同時需要注意的是原始字串的每個反斜槓後面必須跟著一個字元,比如下面的寫法都是非法的:
r""
r""
r"1"
因此不存在一個原始字串等於普通字串
。當做正則表示式匹配時,推薦使用原始字串!