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

求两种标记间文本提取的sed正则表达式及Python re实现

标记间文本提取方案

示例文本

^[[200~a^[[200~aaa aM1bb bbbM1ccc[$cM2ddddM2eeeeeM3ffffff fM3ggggggg M3hhhhh hhM3kkkkk~

需求1:提取第一个M1至最后一个M3之间的文本

目标结果:bb bbbM1ccc[$cM2ddddM2eeeeeM3ffffff fM3ggggggg M3hhhhh hh

sed 命令

echo "^[[200~a^[[200~aaa aM1bb bbbM1ccc[\$cM2ddddM2eeeeeM3ffffff fM3ggggggg M3hhhhh hhM3kkkkk~" | sed -E 's/^.*?M1//; s/M3.*$//'
  • 说明:^.*?M1非贪婪匹配开头到第一个M1的内容并删除;M3.*$匹配最后一个M3到结尾的内容并删除,保留中间部分。

Python re 表达式

import re

text = "^[[200~a^[[200~aaa aM1bb bbbM1ccc[$cM2ddddM2eeeeeM3ffffff fM3ggggggg M3hhhhh hhM3kkkkk~"
match_result = re.search(r'^.*?M1(.*)M3.*$', text, re.DOTALL)
if match_result:
    print(match_result.group(1))
  • 说明:^.*?M1非贪婪匹配到第一个M1;(.*)贪婪匹配到最后一个M3前的所有内容;re.DOTALL确保.匹配换行符(适配含换行的文本场景)。

需求2:提取最后一个M1至第一个M3之间的文本

目标结果:ccc[$cM2ddddM2eeeee

sed 命令

echo "^[[200~a^[[200~aaa aM1bb bbbM1ccc[\$cM2ddddM2eeeeeM3ffffff fM3ggggggg M3hhhhh hhM3kkkkk~" | sed -E 's/.*M1//; s/M3.*//'
  • 说明:.*M1贪婪匹配开头到最后一个M1的内容并删除;M3.*匹配第一个M3到结尾的内容并删除,保留中间部分。

Python re 表达式

import re

text = "^[[200~a^[[200~aaa aM1bb bbbM1ccc[$cM2ddddM2eeeeeM3ffffff fM3ggggggg M3hhhhh hhM3kkkkk~"
match_result = re.search(r'.*M1(.*?)M3', text, re.DOTALL)
if match_result:
    print(match_result.group(1))
  • 说明:.*M1贪婪匹配到最后一个M1;(.*?)非贪婪匹配到第一个M3前的所有内容;re.DOTALL适配含换行的文本场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:55:20