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似乎没有被捕获。