import re
m = re.match('(\w){3}', "THU")
m.group(1)
解決方案是「U」。在正則表達式中,「( w){3}」和「( w {3})」有什麼區別?
我知道正確的方法是「(\ w {3})」,但什麼是「(\ w){3}」?爲什麼它在上面的例子中匹配「U」而不是「T」?
import re
m = re.match('(\w){3}', "THU")
m.group(1)
解決方案是「U」。在正則表達式中,「( w){3}」和「( w {3})」有什麼區別?
我知道正確的方法是「(\ w {3})」,但什麼是「(\ w){3}」?爲什麼它在上面的例子中匹配「U」而不是「T」?
說明:
(\w){3}
^^ Capture
^ A Single character in range [a-zA-Z0-9_]
^ exactly three times
因爲它是捕獲組只圍繞\w
和不包括括號量詞,返回最後\w
(U
與輸入)由m.group(1)
你可以得到匹配所有三個字符m.group(0)
。
這種一般形式的(pattern){repetition}
對於在沒有列表或數組的正則表達式實現中獲得pattern
的最後匹配非常有用。
在Python中,你也可以這樣做:
>>> re.findall(r'\w', "THU")[-1]
'U'
但一些正則表達式的實現沒有的便利。
如果你想捕捉匹配所有三個字符,你會怎麼做:
(\w{3})
正如你可能知道:
\w
一個 '字' 匹配字符{3}
手段匹配最後'東西'3次(
and )
定義一個捕獲組可以檢索後在(\w){3}
,捕獲組包含一個字母,雖然你在一排匹配3,捕獲組結束了的最後一件事的價值它相匹配,在例如這裏,'U'。
在(\w{3})
中,捕獲組包含3個單詞字符,因此對於相同的輸入匹配THU
。
但是「匹配3次並匹配最後一個東西」的含義是什麼?爲什麼不在3次匹配「T」,「T」,「T」? – tje
它匹配3次(即「T」,「H」和「U」),但只是_captures_最後一個。 – SpoonMeiser
https://regex101.com/r/8J990b/2 – AddcitedToLearn
括號構成一個新的組。這裏都解釋了:https://docs.python.org/3.5/library/re.html在部分''(...)''和''match.group([group1,...])' ' –
@tje我改變了標題並調整了描述,以使您的擔憂更加突出。如果您發現我的編輯與您的初衷有衝突,請隨時回滾我的更改 –