使用该re模块,似乎我无法拆分空字符串的模式匹配:
>>> re.split(r'(?<!foo)(?=bar)', 'foobarbarbazbar')
['foobarbarbazbar']
Run Code Online (Sandbox Code Playgroud)
换句话说,即使找到匹配项,如果它是空字符串,甚至re.split也不能拆分字符串.
这些文档re.split似乎支持我的结果.
对于这种特殊情况,"解决方法"很容易找到:
>>> re.sub(r'(?<!foo)(?=bar)', 'qux', 'foobarbarbazbar').split('qux')
['foobar', 'barbaz', 'bar']
Run Code Online (Sandbox Code Playgroud)
但这是一种容易出错的方法,因为那时我必须要注意已经包含我正在拆分的子字符串的字符串:
>>> re.sub(r'(?<!foo)(?=bar)', 'qux', 'foobarbarquxbar').split('qux')
['foobar', 'bar', '', 'bar']
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来分割与re模块的空模式匹配?另外,为什么re.split不允许我首先这样做呢?我知道其他分裂算法可以与正则表达式一起使用; 例如,我可以使用JavaScript的内置功能完成此操作String.prototype.split().