Python 如何使用re.split分割我的字符串?
我从正则表达式开始我的冒险。 我对分割特殊格式的字符串感兴趣。如果一个字母不在括号内,它应该成为输出列表的另一个元素。括号内的字母应放在一起 样本: 我的字符串=>通缉名单Python 如何使用re.split分割我的字符串?,python,regex,split,Python,Regex,Split,我从正则表达式开始我的冒险。 我对分割特殊格式的字符串感兴趣。如果一个字母不在括号内,它应该成为输出列表的另一个元素。括号内的字母应放在一起 样本: 我的字符串=>通缉名单 “ab(hpl)x”=>['a','b','hpl','x'] “(pck)(kx)(sd)”=>['pck','kx','sd'] “(kx)kxx(kd)”=>['kx','k','x','x','kd'] “fghk”=>['f','g','h','k'] 如何使用正则表达式和re.split? 提前感谢您的帮助。
=>“ab(hpl)x”
['a','b','hpl','x']
=>“(pck)(kx)(sd)”
['pck','kx','sd']
=>“(kx)kxx(kd)”
['kx','k','x','x','kd']
=>“fghk”
['f','g','h','k']
re.split
?
提前感谢您的帮助。这不能用
re.split来完成,因为它需要对零长度匹配进行拆分
发件人:
请注意,“拆分”永远不会在空模式匹配上拆分字符串
这里有一个替代方案:
re.findall(r'(\w+(?=\))|\w)', your_string)
举个例子:
>>> for s in ("ab(hpl)x", "(pck)(kx)(sd)", "(kx)kxx(kd)", "fghk"):
... print s, " => ", re.findall(r'(\w+(?=\))|\w)', s)
...
ab(hpl)x => ['a', 'b', 'hpl', 'x']
(pck)(kx)(sd) => ['pck', 'kx', 'sd']
(kx)kxx(kd) => ['kx', 'k', 'x', 'x', 'kd']
fghk => ['f', 'g', 'h', 'k']
使用re.split
无法完成此操作,因为它需要在零长度匹配上进行拆分
发件人:
请注意,“拆分”永远不会在空模式匹配上拆分字符串
这里有一个替代方案:
re.findall(r'(\w+(?=\))|\w)', your_string)
举个例子:
>>> for s in ("ab(hpl)x", "(pck)(kx)(sd)", "(kx)kxx(kd)", "fghk"):
... print s, " => ", re.findall(r'(\w+(?=\))|\w)', s)
...
ab(hpl)x => ['a', 'b', 'hpl', 'x']
(pck)(kx)(sd) => ['pck', 'kx', 'sd']
(kx)kxx(kd) => ['kx', 'k', 'x', 'x', 'kd']
fghk => ['f', 'g', 'h', 'k']
您想要的是findall
而不是split
。使用此re:r'(?您想要findall
而不是split
。使用此re:r'(?@Maciej Ziarko:请注意,通过使用'\w'
和无后顾断言,此答案假设括号将始终保持平衡,并且您的数据中从不包含数字和下划线。鉴于您的测试数据,这是一个公平的假设,因此+1。是的,它们将始终保持平衡。我的数据中的任何其他字符都是小字符呃。我喜欢你的两个答案,我对它们都投了赞成票。顺便问一下:你能推荐一本好的正则表达式教程/书籍吗?我主要用于学习,对于快速测试正则表达式非常有用。@Maciej Ziarko:请注意,这个答案通过使用'\w'
和无后视断言假设pare假设你的测试数据中没有数字和下划线,所以+1是公平的。是的,它们总是平衡的。我的数据中的任何其他字符都是小写字母。我喜欢你的两个答案,我对它们都投了赞成票。顺便问一句:你能推荐一些好的正则表达式教程/书籍吗很好的例子?我主要用于学习,对于快速测试正则表达式非常有用。