如何提取字符串中固定起止标记之间的可变长度内容
字符串截取实现方案
核心逻辑
所有实现都遵循统一逻辑,不受两个标记之间内容长度变化影响:
- 查找起始标记
IF (SUBSTRING(在原字符串中的首次出现位置,计算内容起始位置 = 起始标记位置 + 起始标记本身的长度 - 从内容起始位置开始向后查找,定位终止标记
7,2)))的首次出现位置 - 截取原字符串中内容起始位置到终止标记位置之间的内容,即为目标结果
常见场景实现示例
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
相关产品推荐
相关产品推荐

