【发布时间】:2015-05-07 09:34:36
【问题描述】:
我一直在尝试匹配连字符之间的短语。我意识到我可以轻松地拆分连字符并取出短语,但我的等效正则表达式没有按预期工作,我想了解原因:
([^-,]+(?:(?: - )|$))+
[^-,]+只是我对一个词组的定义
(?: - ) 只是非捕获空格分隔的连字符
所以(?:(?: - )|$)正在捕获连字符或行尾
最后,用+ 量词括在括号中的整个内容匹配多个。
如果我执行regex.match("A - B - C").groups() 得到的是('C',)
我还尝试了更简单的正则表达式([^,-]+)+,结果相似
我使用re.match 是因为我想使用pandas.Series.str.extract 将其应用于很长的列表。
重申一下:我现在在连字符上使用简单的split,但为什么这个正则表达式不返回多个组?
谢谢
【问题讨论】:
-
我得到的是
('C',),而不是('A',)。根据this demo “重复捕获组将仅捕获最后一次迭代。如果您对数据不感兴趣,请在重复组周围放置一个捕获组以捕获所有迭代或使用非捕获组” -
对不起,是的,我也得到了 C。问题已编辑