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

正则表达式挑战:利用正则剥离标签提取目标文本

嘿,咱们来搞定这个正则需求!你要从INICIO和FIM之间的内容里剥掉所有标签,最后整理成TEXTO1|TEXTO2|TEXTO3 e TEXTO4|TEXTO5|TEXTO6的格式,用1到2个正则就能搞定,下面给你两种实用方案:

方案一:两步正则(清晰易维护)

这个方案先精准提取目标区间,再剥离标签,最后整理格式,逻辑一目了然:

  1. 提取INICIO与FIM之间的内容
    用这个正则捕获区间内的所有内容(包括换行),避免误匹配区间外的内容:
(?<=INICIO)([\s\S]*?)(?=FIM)
  • (?<=INICIO):正向预查,确保匹配的内容紧跟在INICIO之后
  • ([\s\S]*?):非贪婪匹配任意字符(包括换行),防止超出FIM的范围
  • (?=FIM):正向预查,确保匹配的内容紧邻FIM之前
  1. 剥离所有HTML/XML标签
    对第一步捕获到的内容,用这个正则匹配所有标签并替换为空字符串:
<[^>]+>
  • <[^>]+>:匹配所有以<开头、>结尾的内容,覆盖所有类型的标签(包括带属性的XML标签)
  1. 整理成|分隔的格式
    剥离标签后,清理多余的空格/换行,把独立的有效文本块用|连接(比如TEXTO3 e TEXTO4会保留为一个完整块,不会被拆分)。

方案二:一步正则配合逻辑处理(简洁高效)

如果想合并步骤,可以直接提取区间内所有被标签包裹的非空文本,再拼接成目标格式:

(?<=INICIO)(?:<[^>]*>([^<]+)<[^>]*>)+(?=FIM)

这个正则会直接捕获所有标签内的有效文本,你只需要把捕获到的非空文本用|拼接即可,省去单独剥离标签的步骤。

示例代码(Python)

import re

# 待处理的完整文本
raw_text = "INICIO<aaa>TEXTO1</aaa><bbb></bbb> <?xml:proriety>TEXTO2</xml:proriety=\"atribute\"> <aaa>TEXTO3 e TEXTO4</aaa> <ccc>TEXTO5</ccc> <ddd>TEXTO6</ddd> FIM"

# 方案一实现
# 1. 提取区间内容
interval_content = re.search(r'(?<=INICIO)([\s\S]*?)(?=FIM)', raw_text).group(1)
# 2. 剥离所有标签
stripped_content = re.sub(r'<[^>]+>', '', interval_content)
# 3. 清理空白并拼接成目标格式
clean_blocks = [block.strip() for block in re.split(r'\s{2,}', stripped_content.strip()) if block]
result = '|'.join(clean_blocks)

# 方案二实现
tagged_texts = re.findall(r'<[^>]*>([^<]+)<[^>]*>', interval_content)
result_alt = '|'.join([text.strip() for text in tagged_texts if text.strip()])

print(result)       # 输出:TEXTO1|TEXTO2|TEXTO3 e TEXTO4|TEXTO5|TEXTO6
print(result_alt)   # 输出同样结果

注意:如果你的待处理文本存在复杂嵌套标签,可能需要调整正则逻辑,但根据你提供的示例片段,上面的方案完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:47:32