Python 带重复组的正则表达式

Python 带重复组的正则表达式,python,regex,Python,Regex,我一直在尝试在连字符之间匹配一个短语。我意识到,我可以很容易地在连字符上拆分并取出短语,但我的等效正则表达式没有按预期工作,我想了解原因: ([^-,]+(?:(?:-)|$)+ [^-,]+只是我对一个短语的定义 (?:-)只是非捕获空格分隔的连字符 因此,(?:(?:-)|$)正在捕获连字符或行尾 最后,用+量词括起来的整件事匹配多个量词 如果我执行regex.match(“A-B-C”).groups()得到的是('C',) 我还尝试了更简单的正则表达式([^,-]+)+,结果类似 我使用

我一直在尝试在连字符之间匹配一个短语。我意识到,我可以很容易地在连字符上拆分并取出短语,但我的等效正则表达式没有按预期工作,我想了解原因:

([^-,]+(?:(?:-)|$)+

[^-,]+
只是我对一个短语的定义

(?:-)
只是非捕获空格分隔的连字符

因此,
(?:(?:-)|$)
正在捕获连字符或行尾

最后,用
+
量词括起来的整件事匹配多个量词

如果我执行
regex.match(“A-B-C”).groups()
得到的是
('C',)

我还尝试了更简单的正则表达式
([^,-]+)+
,结果类似

我使用
re.match
是因为我想使用
pandas.Series.str.extract
将其应用于一个很长的列表

重申一下:我现在在一个连字符上使用了一个简单的
split
,但是为什么这个正则表达式不返回多个组呢


感谢

正则表达式捕获组通过其在表达式中的外观静态地“命名”。每个捕获组都有自己的编号,并且无论单个组捕获某物的频率如何,都会将匹配项分配给该组

如果一个组在之前捕获了某个内容,之后又再次捕获,则稍后的结果将覆盖之前捕获的内容。使用普通匹配无法收集组的所有捕获值

如果要查找多个值,则只需匹配单个组,并对字符串的其余部分重复匹配。这通常由
re.findall
re.finditer
完成:

>>> re.findall('\s*([^-,]+?)\s*', 'A - B - C')
['A', 'B', 'C']

我得到的是
('C',)
,而不是
('A',)
。Per“重复捕获组将只捕获最后一次迭代。在重复组周围放置一个捕获组以捕获所有迭代,或者如果您对数据不感兴趣,则使用非捕获组”抱歉,是的,我也得到了C。问题编辑我不知道。谢谢,这很有道理!