python正则表达式捕获组

python正则表达式捕获组,python,regex,capture-group,Python,Regex,Capture Group,我试图编写一个正则表达式模式,它要么匹配一个数字,要么匹配一个数字和一个尾随字符串。因此,匹配应输出: Matching "string100": [('100', '')] Matching "string900_TYPE": [('900', 'TYPE')] 但是,我得到的是: Matching "string100": [('100', '')] Matching "string900_TYPE": [('900', ''), ('', 'TYPE')] 其思想是

我试图编写一个正则表达式模式,它要么匹配一个数字,要么匹配一个数字和一个尾随字符串。因此,匹配应输出:

Matching "string100":      [('100', '')]
Matching "string900_TYPE": [('900', 'TYPE')]
但是,我得到的是:

Matching "string100":      [('100', '')]
Matching "string900_TYPE": [('900', ''), ('', 'TYPE')]
其思想是将数字作为元组中的第一项,将“TYPE”作为第二项,这样我就可以很容易地确定元组中是否存在“TYPE”(第二个元组项为空-->'')

代码:

import re


stringList = ["string100", "string900_TYPE"]
pattern = r"(\d{3})|\w(TYPE)"

for string in stringList:
    match = re.findall(pattern, string)
    print('Matching "' + string + '":\t', match)
提前谢谢。

(\d{3})(?:(\w+))
会成功的。(感谢@Casimir et Hippolyte)


它也比使用更简单的模式(如
(\d{3})(\w+)
(感谢@Wiktor Stribiżew)

更健壮,比如:
(\d{3})(?:(\w+))
。不要使用替换,描述完整的字符串。@CasimiritHippolyte:就是这样。非常感谢。该模式实际上可以简化为
+(\d{3})u?(\ w+)
,这对正则表达式引擎来说需要更少的步骤。是否有任何理由在子组周围使用非捕获组
(\w+)
?如果使用
(\d{3})(\w+)
(注意开始时必须没有
+
),那么您也可以匹配
123
(\d{3})(?:。\w+)
在这里是最好的,因为
(?:。\w+)
使整个模式序列都是可选的。
+
一定是以某种方式滑入的<代码>123似乎没有被捕获。