带有重复组的正则表达式

Luc*_*nse 3 python regex

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

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

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

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

所以(?:(?: - )|$)被捕获连字符或线的端

最后,用量词括在括号中的整个内容+匹配不止一个。

如果我表演,我得到的regex.match("A - B - C").groups()('C',)

我也尝试过更简单的正则表达式([^,-]+)+,结果相似

我使用re.match是因为我想用它pandas.Series.str.extract来将它应用到一个很长的列表中。

重申:我现在split在连字符上使用简单但为什么这个正则表达式不返回多个组?

谢谢

pok*_*oke 5

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

如果一个组之前捕获了一些东西,后来又做了,那么后面的结果会覆盖之前捕获的东西。无法使用正常匹配来收集组的所有捕获值。

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

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