我一直在尝试匹配连字符之间的短语。我意识到我可以轻松地拆分连字符并取出短语,但我的等效正则表达式无法按预期工作,我想了解原因:
([^-,]+(?:(?: - )|$))+
[^-,]+
只是我对短语的定义
(?: - )
只是非捕获空格分隔的连字符
so (?:(?: - )|$)
正在捕获连字符或行尾
最后,整个内容用括号括起来+
量词匹配多个。
如果我表演我会得到什么regex.match("A - B - C").groups()
is ('C',)
我也尝试过更简单的正则表达式([^,-]+)+
具有相似的结果
我在用着re.match
因为我想用pandas.Series.str.extract
将其应用于一个很长的列表。
重申一下:我现在正在使用一个简单的split
在连字符上,但为什么这个正则表达式不返回多个组?
Thanks
正则表达式捕获组根据其在表达式中的出现进行静态“命名”。每个捕获组都有自己的编号,并且无论单个组捕获某物的频率如何,都会将匹配项分配给该组。
如果一个小组之前捕获了某些内容,然后又再次捕获了某些内容,则后面的结果将覆盖之前捕获的内容。无法使用正常匹配来收集组的所有捕获值。
如果要查找多个值,则只需匹配单个组并对字符串的其余部分重复匹配。这通常是由re.findall
or re.finditer
:
>>> re.findall('\s*([^-,]+?)\s*', 'A - B - C')
['A', 'B', 'C']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)