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

正则表达式匹配直至特定顺序字符序列的问题求助

匹配完整标签段的正则解决方案

问题说明

需要匹配从<SERIES>开始到</SERIES>结束的完整文本段,目标文本示例如下:

<SERIES>
<OWNER-CIK>0000003521
<SERIES-ID>S000020958
<SERIES-NAME>Alger Small Cap Focus Fund
<CLASS-CONTRACT>
<CLASS-CONTRACT-ID>C000059340
<CLASS-CONTRACT-NAME>Alger Small Cap Focus Fund Class I
<CLASS-CONTRACT-TICKER-SYMBOL>AOFIX
</CLASS-CONTRACT>
<CLASS-CONTRACT>
<CLASS-CONTRACT-ID>C000095961
<CLASS-CONTRACT-NAME>Alger Small Cap Focus Fund Class Z
<CLASS-CONTRACT-TICKER-SYMBOL>AGOZX
</CLASS-CONTRACT>
<CLASS-CONTRACT>
<CLASS-CONTRACT-ID>C000179520
<CLASS-CONTRACT-NAME>Class Y
<CLASS-CONTRACT-TICKER-SYMBOL>AOFYX
</CLASS-CONTRACT>
</SERIES>
<SERIES>

之前尝试的<SERIES>[^/]+会在遇到</CLASS-CONTRACT>时提前终止;把S加入排除集合后,匹配结束得更早。需要精准匹配到完整</SERIES>前的所有内容。

解决方案

可用正则表达式

根据正则引擎的支持情况,选下面其中一种:

  • 支持DOTALL模式(.可匹配换行符):
    <SERIES>.*?</SERIES>
    
  • 不支持DOTALL模式:
    <SERIES>[\s\S]*?</SERIES>
    

原正则失效原因

  • <SERIES>[^/]+:[^/]是排除型字符集,会匹配除了/之外的所有字符,所以遇到</CLASS-CONTRACT>里的/就立刻停止匹配,导致提前终止。
  • 加入S到排除集合后,[^/S]+会避开所有/和S,遇到<SERIES-ID>里的S就直接停了,匹配范围更短。

正则逻辑解释

  • <SERIES>:精准匹配起始标签
  • .*?/[\s\S]*?:*?是非贪婪量词,会尽可能少地匹配字符,直到找到第一个</SERIES>就停止,不会过度匹配后续的<SERIES>段
  • </SERIES>:精准匹配结束标签

内容的提问来源于stack exchange,提问作者Luis Ramon Ramirez Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:15:19