2017-05-02 365 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

相关问题