繁体   English   中英

正则表达式与重复组

[英]Regex with repeating groups

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

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

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

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

所以(?:(?: - )|$)捕获连字符或行尾

最后,括号中用+量词包围的整个事物匹配不止一个。

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

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

我正在使用re.match因为我想使用pandas.Series.str.extract将它应用于一个很长的列表。

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

谢谢

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

如果一个组之前捕获了某些内容,之后再次捕获,则后一个结果会覆盖之前捕获的内容。 无法使用常规匹配收集所有组的捕获值。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM