【发布时间】:2015-07-11 09:17:22
【问题描述】:
使用 re 模块,我似乎无法拆分空字符串的模式匹配:
>>> re.split(r'(?<!foo)(?=bar)', 'foobarbarbazbar')
['foobarbarbazbar']
也就是说,即使找到了匹配,如果是空字符串,即使re.split也无法拆分字符串。
docs for re.split 似乎支持我的结果。
对于这种特殊情况,很容易找到“解决方法”:
>>> re.sub(r'(?<!foo)(?=bar)', 'qux', 'foobarbarbazbar').split('qux')
['foobar', 'barbaz', 'bar']
但这是一种容易出错的方法,因为这样我就必须提防已经包含要拆分的子字符串的字符串:
>>> re.sub(r'(?<!foo)(?=bar)', 'qux', 'foobarbarquxbar').split('qux')
['foobar', 'bar', '', 'bar']
有没有更好的方法来拆分与re 模块匹配的空模式?此外,为什么re.split 一开始就不允许我这样做?我知道使用正则表达式的其他拆分算法是可能的;例如,我可以使用 JavaScript 的内置 String.prototype.split() 来做到这一点。
【问题讨论】: