使用Python提取特定分隔符包裹的指定位置字符串的实现方法
解决Python提取指定分隔符包裹内容的方案
核心思路
你需要的「第N对特定字符包裹的字符串」,本质是将原始字符串按对应分隔符拆分,取拆分后列表中对应位置的元素即可。注意默认计数从1开始,若要从0开始计数可自行调整索引偏移
通用提取函数
你可以先写一个可复用的提取函数:
def get_nth_segment(raw_str: str, separator: str, nth: int) -> str: # 按指定分隔符拆分字符串 segments = raw_str.split(separator) # 校验位置合法性,nth从1开始计数因此索引要减1 if 1 <= nth < len(segments): return segments[nth] # 位置不合法返回空字符串,也可自定义报错逻辑 return ""
效果验证
以你给出的示例字符串5d:6g:9h:5t:7a:45;33:12:5B:9J;70;9C;89;85:4B:38:16:9B:45:56:85:为例:
- 取第3对
;中间的内容:调用get_nth_segment(示例串, ';', 3),返回结果70 - 取第15对
:中间的内容:调用get_nth_segment(示例串, ':', 15),返回结果56
整合到现有代码的完整实现
你当前的代码是从zip压缩包读取txt文件,注意读取到的行是bytes类型,需要先解码为字符串再处理:
import zipfile def get_nth_segment(raw_str: str, separator: str, nth: int) -> str: segments = raw_str.split(separator) if 1 <= nth < len(segments): return segments[nth] return "" arq = zipfile.ZipFile('DSts.zip') for file in arq.namelist(): print(f"当前处理文件:{file}") f = arq.open(file) lines = f.readlines() for line in lines: # bytes转字符串,默认用utf-8,遇到乱码可替换为gbk尝试 line_str = line.decode('utf-8').strip() # 提取第10对;中间的内容 res_semicolon = get_nth_segment(line_str, ';', 10) # 提取第15对:中间的内容 res_colon = get_nth_segment(line_str, ':', 15) # 结果输出,可按需修改为存储逻辑 if res_semicolon: print(f"第10对分号包裹内容:{res_semicolon}") if res_colon: print(f"第15对冒号包裹内容:{res_colon}")
注意事项
如果你的文本中包含HTML标签(比如示例里的<p>、<code>),可以先通过字符串替换把标签内容清空,再做拆分处理即可。
内容的提问来源于stack exchange,提问作者Elle Oliver
相关产品推荐
相关产品推荐

