首页 > 解决方案 > Python正则表达式捕获组拆分问题

问题描述

试图理解python中的正则表达式示例,这是我的代码

line='bar asdfgh klmn,     foo'
print(re.split(r'(;|,|\s)\s*',line))
#output is ['bar', ' ', 'asdfgh', ' ', 'klmn', ',', 'foo']

在输出中,它显示了字符串和分隔符,最后一个分隔符是一个逗号,有五个空格,而不仅仅是一个逗号

如果分隔符只是一个逗号,那么输出不应该是这样的吗?

#output ['bar', ' ', 'asdfgh', ' ', 'klmn', ',', '     foo']

标签: pythonregex

解决方案


如果在正则表达式中使用捕获组,则re.split包括捕获组的内容。但是,它仍然使用整个匹配作为分隔符,这会导致您观察到的行为。如果你想"".join(split_results)等于原始字符串,你需要捕获整个分隔符(并在你现在有括号的地方使用非捕获括号:)r'((?:;|,|\s)\s*)'


推荐阅读