Skip to main content
 首页 » 编程设计

python之在 Python 中捕获重复组

2025年05月04日22shanyou

我想捕获 n 次一个重复 n 次的模式,n >= 0。我有这样的字符串:

a = 'x="2"' 
b = 'x="2,3", y="hello", z="true"' 

我想提取“x”及其值“2,3”、“y”及其值“hello”等。变量由逗号和空格分隔;值在双引号内。

如何使用 Python 中的 re 库执行此操作?

我天真地尝试了以下内容:

match = re.search(r'^((?P<variable>[0-9a-zA-Z_-]+)="(?P<value>.*)"(?:,\s)?)*', b) 

如果我打印 match.groupdict(),它会输出:

{'variable': 'x', 'value': '2,3", y="hello", z="true'} 

请您参考如下方法:

你得到的比你预想的多的原因是你匹配(删除了组命名):

".*" 

由于正则表达式默认使用贪婪匹配,它会尽可能多地获取文本,只要它能在末尾加上 ",即使中间文本也包含 “。您可以将其设为非贪婪匹配:

"(?P<value>.*?)" 

或者贪婪匹配非"字符:

"(?P<value>[^"]*)" 

下一个问题是您会发现这只匹配字符串中最后一次出现的模式。如果你想获得所有未知数量的匹配项,你需要 re.findall() .不幸的是,findall() 不支持 groupdict。它的表弟re.finditer() ,但是,返回具有以下方法的匹配对象:

for match in re.finditer(r'(?P<variable>[0-9a-zA-Z_-]+)="(?P<value>[^"]*)"', b): 
    print(match.groupdict()) 

{'variable': 'x', 'value': '2,3'} 
{'variable': 'y', 'value': 'hello'} 
{'variable': 'z', 'value': 'true'}