我一直在尝试在连字符之间匹配一个词组。我意识到,我可以轻松地将连字符分开并弄清楚短语,但是与此相对应的正则表达式无法按预期工作,我想了解原因:
([^-,]+(?:(?: - )|$))+
[^-,]+
只是我对短语的定义
(?: - )
只是非捕获空间定界的连字符
所以(?:(?: - )|$)
是捕获连字符或行尾
最后,用括号括起来的整个事物+
匹配多个。
如果我表演,我会得到的regex.match("A - B - C").groups()
是('C',)
我也尝试了更简单的正则表达式([^,-]+)+
,结果相似
我re.match
之所以使用pandas.Series.str.extract
,是因为我想将其应用于很长的列表。
重申一下:我现在split
在连字符上使用了easy ,但是为什么此正则表达式不返回多个组?
谢谢
正则表达式捕获组通过其在表达式中的出现静态地“命名”。每个捕获组都有自己的编号,并且将匹配项分配给该组,而不管单个组捕获事物的频率如何。
如果某个组之前和之后捕获了某项内容,那么后来的结果将覆盖之前捕获的内容。无法使用常规匹配来收集组的所有捕获值。
如果要查找多个值,则只需要匹配一个组,然后在其余字符串上重复匹配。通常由re.findall
或完成re.finditer
:
>>> re.findall('\s*([^-,]+?)\s*', 'A - B - C')
['A', 'B', 'C']
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句