2017-05-02 313 views
-2
import re 
m = re.match('(\w){3}', "THU") 
m.group(1) 

解決方案是「U」。在正則表達式中,「( w){3}」和「( w {3})」有什麼區別?

我知道正確的方法是「(\ w {3})」,但什麼是「(\ w){3}」?爲什麼它在上面的例子中匹配「U」而不是「T」?

+3

https://regex101.com/r/8J990b/2 – AddcitedToLearn

+0

括號構成一個新的組。這裏都解釋了:https://docs.python.org/3.5/library/re.html在部分''(...)''和''match.group([group1,...])' ' –

+0

@tje我改變了標題並調整了描述,以使您的擔憂更加突出。如果您發現我的編輯與您的初衷有衝突,請隨時回滾我的更改 –

回答

0

說明:

(\w){3} 
^^    Capture 
^    A Single character in range [a-zA-Z0-9_] 
    ^   exactly three times 

因爲它是捕獲組只圍繞\w和不包括括號量詞,返回最後\wU與輸入)由m.group(1)你可以得到匹配所有三個字符m.group(0)

這種一般形式的(pattern){repetition}對於在沒有列表或數組的正則表達式實現中獲得pattern的最後匹配非常有用。

在Python中,你也可以這樣做:

>>> re.findall(r'\w', "THU")[-1] 
'U' 

但一些正則表達式的實現沒有的便利。

如果你想捕捉匹配所有三個字符,你會怎麼做:

(\w{3}) 
+0

爲什麼最後\ w會返回?我無法理解它是如何工作的 – tje

+0

因爲{3}'就像循環一樣 - 返回3.但是你只捕獲了一個。所以最後一個被返回。 – dawg

+0

FWIW,如果啓用了Unicode,'\ w'匹配比'[a-zA-Z0-9_]'多(默認爲Python 3) –

1

正如你可能知道:

  • \w一個 '字' 匹配字符
  • {3}手段匹配最後'東西'3次
  • ( and )定義一個捕獲組可以檢索後

(\w){3},捕獲組包含一個字母,雖然你在一排匹配3,捕獲組結束了的最後一件事的價值它相匹配,在例如這裏,'U'。

(\w{3})中,捕獲組包含3個單詞字符,因此對於相同的輸入匹配THU

+0

但是「匹配3次並匹配最後一個東西」的含義是什麼?爲什麼不在3次匹配「T」,「T」,「T」? – tje

+0

它匹配3次(即「T」,「H」和「U」),但只是_captures_最後一個。 – SpoonMeiser

相關問題