You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据给定偏移量输出两个模式之间的子字符串?

根据字符偏移量提取指定模式间的子字符串

问题场景

给定字符串、两个边界模式(如起始模式">"和结束模式"</p>"),以及一个字符偏移量,需要提取包含该偏移量的那一段两个模式之间的子字符串。例如:

string = '<p class="one">A quick brown fox</p><p class="two">Jumps over</p>'

当偏移量为20时,输出A quick brown fox;偏移量为55时,输出Jumps over。

解决方案思路

  1. 定位所有起始模式的结束位置(即起始模式之后的第一个字符位置),再为每个起始位置匹配对应的第一个结束模式的起始位置,形成一个个包含目标子串的区间。
  2. 判断输入的偏移量落在哪个区间范围内。
  3. 提取该区间内的子字符串。

代码实现(Python)

def extract_substring_by_offset(input_str, start_pattern, end_pattern, offset):
    start_len = len(start_pattern)
    end_len = len(end_pattern)
    
    # 收集所有起始模式后的起始位置
    start_positions = []
    current_pos = 0
    while True:
        current_pos = input_str.find(start_pattern, current_pos)
        if current_pos == -1:
            break
        start_positions.append(current_pos + start_len)
        current_pos += start_len
    
    # 为每个起始位置匹配对应的结束位置,生成区间
    intervals = []
    for start in start_positions:
        end_pos = input_str.find(end_pattern, start)
        if end_pos != -1:
            intervals.append((start, end_pos))
    
    # 匹配偏移量所在的区间并提取子串
    for start, end in intervals:
        if start <= offset <= end:
            return input_str[start:end]
    
    # 偏移量不在有效区间时返回空字符串,可按需修改逻辑
    return ""

测试示例

test_string = '<p class="one">A quick brown fox</p><p class="two">Jumps over</p>'
# 测试偏移量20
print(extract_substring_by_offset(test_string, '">', '</p>', 20))  # 输出: A quick brown fox
# 测试偏移量55
print(extract_substring_by_offset(test_string, '">', '</p>', 55))  # 输出: Jumps over

说明

  • 该方法先批量定位所有符合条件的有效区间,再通过偏移量匹配对应的区间,确保提取的是包含目标偏移量的目标子串。
  • 如果偏移量不在任何两个模式的有效区间内,函数默认返回空字符串,你可以根据需求调整返回逻辑(比如抛出提示信息)。

内容的提问来源于stack exchange,提问作者Lalas M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:30:42