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

如何提取字符串中固定起止标记之间的可变长度内容

字符串截取实现方案

核心逻辑

所有实现都遵循统一逻辑,不受两个标记之间内容长度变化影响:

  1. 查找起始标记IF (SUBSTRING(在原字符串中的首次出现位置,计算内容起始位置 = 起始标记位置 + 起始标记本身的长度
  2. 从内容起始位置开始向后查找,定位终止标记7,2)))的首次出现位置
  3. 截取原字符串中内容起始位置到终止标记位置之间的内容,即为目标结果

常见场景实现示例

Python 实现

def extract_target_content(raw_str):
    start_tag = "IF (SUBSTRING("
    end_tag = "7,2)))"
    # 定位起始标记位置
    start_tag_pos = raw_str.find(start_tag)
    if start_tag_pos == -1:
        return "" # 未匹配到起始标记时返回空,可按需调整返回逻辑
    # 计算内容实际起始位置
    content_start = start_tag_pos + len(start_tag)
    # 从内容起始位置向后定位终止标记
    end_tag_pos = raw_str.find(end_tag, content_start)
    if end_tag_pos == -1:
        return "" # 未匹配到终止标记时返回空,可按需调整返回逻辑
    # 截取目标内容
    return raw_str[content_start:end_tag_pos]

# 测试示例
test_str = "IF (SUBSTRING(A.DATE_QUOTE_CNV,1,4) >= '1900' AND SUBSTRING(A.DATE_QUOTE_CNV,1,4) <= '2999' AND SUBSTRING(A.DATE_QUOTE_CNV,5,2) <= '12' AND SUBSTRING(A.DATE_QUOTE_CNV,5,2) >= '01' AND SUBSTRING(A.DATE_QUOTE_CNV,7,2) <= '31' AND SUBSTRING(A.DATE_QUOTE_CNV,7,2) >= '01',CONCAT(SUBSTRING(A.DATE_QUOTE_CNV,1,4),'-',SUBSTRING(A.DATE_QUOTE_CNV,5,2),'-',SUBSTRING(A.DATE_QUOTE_CNV,7,2)))"
print(extract_target_content(test_str))

输出结果:
A.DATE_QUOTE_CNV,1,4) >= '1900' AND SUBSTRING(A.DATE_QUOTE_CNV,1,4) <= '2999' AND SUBSTRING(A.DATE_QUOTE_CNV,5,2) <= '12' AND SUBSTRING(A.DATE_QUOTE_CNV,5,2) >= '01' AND SUBSTRING(A.DATE_QUOTE_CNV,7,2) <= '31' AND SUBSTRING(A.DATE_QUOTE_CNV,7,2) >= '01',CONCAT(SUBSTRING(A.DATE_QUOTE_CNV,1,4),'-',SUBSTRING(A.DATE_QUOTE_CNV,5,2),'-',SUBSTRING(A.DATE_QUOTE_CNV,

JavaScript 实现

function extractTargetContent(rawStr) {
    const startTag = "IF (SUBSTRING(";
    const endTag = "7,2)))";
    const startTagPos = rawStr.indexOf(startTag);
    if (startTagPos === -1) return "";
    const contentStart = startTagPos + startTag.length;
    const endTagPos = rawStr.indexOf(endTag, contentStart);
    if (endTagPos === -1) return "";
    return rawStr.slice(contentStart, endTagPos);
}

MySQL 实现(直接在SQL中处理字段内容)

SELECT
  SUBSTRING(
    待处理字段名,
    LOCATE('IF (SUBSTRING(', 待处理字段名) + LENGTH('IF (SUBSTRING('),
    LOCATE('7,2)))', 待处理字段名, LOCATE('IF (SUBSTRING(', 待处理字段名)) - (LOCATE('IF (SUBSTRING(', 待处理字段名) + LENGTH('IF (SUBSTRING(')))
  ) AS extracted_content
FROM 业务表名;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 21:51:03