如何将Python中re.split与re.findall结果结合以保留分隔符
Python正则分割字符串并保留分隔符的解决方法
问题场景
我需要在Python中使用正则表达式分割字符串,同时保留作为分隔符的匹配项。当前使用re.split按\d+\.\d+\.\d+分割字符串得到列表:['oren;moish', '/-/v', '/barbi'],用re.findall获取到分隔符列表:['30.4.200', '6.99.5'],但不知如何将二者合并为目标列表:['oren;moish', '30.4.200', '/-/v', '6.99.5', '/barbi']。相关代码如下:
import re s = "oren;moish30.4.200/-/v6.99.5/barbi" print(re.split("\d+\.\d+\.\d+", s)) print(re.findall("\d+\.\d+\.\d+", s))
解决方案
方法一:利用带捕获组的re.split
这是最简洁的方式——给正则表达式加上捕获组(括号包裹),re.split会自动将分隔符匹配项也包含在返回的结果列表中:
import re s = "oren;moish30.4.200/-/v6.99.5/barbi" # 用原始字符串r""避免转义问题,括号将分隔符设为捕获组 result = re.split(r"(\d+\.\d+\.\d+)", s) print(result) # 输出: ['oren;moish', '30.4.200', '/-/v', '6.99.5', '/barbi']
方法二:手动合并分割结果与分隔符列表
如果已经分别得到了分割后的内容列表和分隔符列表,可以通过遍历交替拼接的方式合并:
import re s = "oren;moish30.4.200/-/v6.99.5/barbi" parts = re.split(r"\d+\.\d+\.\d+", s) separators = re.findall(r"\d+\.\d+\.\d+", s) result = [] # 交替添加分割部分和分隔符 for part, sep in zip(parts, separators): result.append(part) result.append(sep) # 添加最后一个分割部分(没有后续分隔符) result.append(parts[-1]) print(result) # 输出: ['oren;moish', '30.4.200', '/-/v', '6.99.5', '/barbi']
内容的提问来源于stack exchange,提问作者OrenIshShalom
相关产品推荐
相关产品推荐

