使用re.split()拆分字符串出现尾部空字符串的正则优化方案咨询
拆分字符串分离数字序列避免生成尾部空串的解决方案
你不需要调整re.split()所用的正则,直接换用re.findall()方法就能一步得到无空串的拆分结果,使用正则r'\d+|\D+'即可:
import re s = 'abc123abc' print(re.findall(r'\d+|\D+', s)) s = 'abc123abc123' print(re.findall(r'\d+|\D+', s))
运行输出结果为:
['abc', '123', 'abc'] ['abc', '123', 'abc', '123']
原理解释
该正则会交替匹配连续的数字序列、连续的非数字序列,自动覆盖整个字符串的所有内容,不会生成多余的空串,也不需要额外做过滤操作。
如果确实需要坚持使用re.split()实现,无法通过优化正则完全避免边界空串的生成,这是re.split()本身的运行逻辑决定的:只要分隔符出现在字符串的头部或尾部,就会对应生成开头/结尾的空串。这种场景下可以直接加简单的列表推导过滤空值即可:
res = [i for i in re.split('(\d+)', s) if i]
内容的提问来源于stack exchange,提问作者user2668284
相关产品推荐
相关产品推荐

