You need to enable JavaScript to run this app. Python中如何循环提取相邻两个指定标记字符间的子串
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何循环提取相邻两个指定标记字符间的子串

同标记字符间多段内容截取的实现方案

针对需要循环遍历整个字符串、逐对匹配起止标记、提取中间内容的需求,提供两种可直接落地的实现:

基于原有单次截取逻辑的循环改造

你现有单次截取的核心逻辑可以直接复用,只需要补上循环边界控制:每次截取完成后,把下一次的搜索起点移动到当前截取段结束的标记位置,同时增加找不到后续标记时的终止判断,避免索引报错。
改造后的完整可运行代码:

start_marker = end_marker = 'o'
string = "ovdasdaso je ovakvo okovano okej"
result = []
# 初始搜索起点设为字符串开头
search_pos = 0
while True:
    try:
        # 从当前搜索位置往后找下一个起始标记
        start = string.index(start_marker, search_pos) + len(start_marker)
        # 从起始标记的下一位开始找匹配的结束标记
        end = string.index(end_marker, start)
        # 将截取到的内容存入结果列表
        result.append(string[start:end])
        # 更新下一轮的搜索起点为当前结束标记的位置
        search_pos = end
    except ValueError:
        # 遍历到字符串末尾、找不到下一个标记时终止循环
        break
print(result)

运行后得到的结果完全匹配预期:['vadasdas', 'vakv', 'k', ' ']

更简洁的正则实现

如果不需要手动控制每一步的索引扫描逻辑,可以直接用正则的非贪婪匹配完成提取,代码量更少:

import re
string = "ovdasdaso je ovakvo okovano okej"
# 匹配成对出现的o,提取两个o之间的任意内容
result = re.findall(r'o(.*?)o', string)
print(result)

实现说明

  • 正则中的.*?是非贪婪匹配规则,会在遇到第一个匹配的结束标记时就停止匹配,不会跨段抓取多个标记间的内容,刚好符合成对截取的需求
  • 如果标记是包含正则特殊字符的内容(比如.、*、+),可以用re.escape(标记内容)做转义处理,避免模式匹配失效

内容的提问来源于stack exchange,提问作者User 123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 14:54:05