如何在Python中使用多个分隔符分割字符串提取目标字段
Python多分隔符分割字符串实现指南
原实现的问题定位
你之前写的rsplit('.', 4)逻辑,是从字符串最右端开始,最多按.分割4次,针对当前字符串,实际分割得到的列表是:
['xxx', 'xxx', 'com-bonding_err_bond0-if_eth2-d', 'rrd', 'csv']
因为所有由横杠连接的内容都被打包到了同一个字符串片段里,完全没法区分片段开头的com-前缀、中间的目标内容、片段结尾的-d后缀,所以取索引为2的片段时,自然会带上多余的前后缀,达不到预期效果。
两种可落地的实现方案
方案1:使用re模块实现多分隔符分割
Python内置的re模块提供的split方法,可以通过正则规则同时匹配多个不同的分隔符,是做多分隔符切分最通用、最灵活的方案。
实现代码:
import re csv_str = "xxx.xxx.com-bonding_err_bond0-if_eth2-d.rrd.csv" # 规则中[.-]表示:只要遇到.或者-,就作为切分点 split_result = re.split(r'[.-]', csv_str) # 切完的全量片段列表如下: # ['xxx', 'xxx', 'com', 'bonding_err_bond0', 'if_eth2', 'd', 'rrd', 'csv'] # 提取索引3到4的两个目标片段,用原来的连接符-拼回去 target = '-'.join(split_result[3:5]) print(target)
运行后输出的结果就是你需要的bonding_err_bond0-if_eth2。
方案2:纯字符串定位切片实现
如果不想引入正则模块,也可以通过找固定标记的位置直接切,这个场景里目标内容的前后边界是固定的:前面跟在com-后面,后面在-d.rrd前面。
代码如下:
csv_str = "xxx.xxx.com-bonding_err_bond0-if_eth2-d.rrd.csv" # 找前边界:定位到"com-"的结尾位置 front_pos = csv_str.find("com-") + len("com-") # 找后边界:定位到"-d.rrd"的开头位置 back_pos = csv_str.find("-d.rrd") # 按位置切片拿内容 target = csv_str[front_pos:back_pos] print(target)
小提醒:第二种定位切片的方法只适合目标前后的标记在整个字符串里唯一、不重复的场景,如果字符串里存在多个相同标记,容易定位错位置,这种情况还是优先用多分隔符分割的方案更可靠。
内容的提问来源于stack exchange,提问作者leanghy
相关产品推荐
相关产品推荐

