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我改变了标题并调整了描述,以使您的担忧更加突出。如果您发现我的编辑与您的初衷有冲突,请随时回滚我的更改 –