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

正则表达式需求:匹配\editable标签多组内容并忽略特定中间匹配

解决\editable结构的正则匹配问题

问题分析

你需要匹配\editable[xxx]{...}结构,提取方括号内的内容(组1)和花括号内的目标内容(组2),同时要处理花括号内的非转义嵌套结构,并且要能返回所有匹配结果。之前的正则存在两个问题:只能匹配单个结果、无法处理嵌套花括号。

改进后的正则表达式

场景1:花括号内是LaTeX命令(如\textit{xxx})

如果你的目标是提取命令内部{}里的内容,用这个正则:

r"\\editable\[([^\]]+)\]\{\\[a-zA-Z]+\{((?:[^\\{}]|\\.|(?<!\\)\{(?:[^\\{}]|\\.)*?(?<!\\)\})*)\}\}"

场景2:花括号内直接是内容(支持非转义嵌套花括号)

如果{}内没有前置LaTeX命令,直接是带嵌套的内容,用这个正则:

r"\\editable\[([^\]]+)\]\{((?:[^\\{}]|\\.|(?<!\\)\{(?:[^\\{}]|\\.)*?(?<!\\)\})*)\}"

正则规则说明

  • \\editable:精准匹配固定标识\editable
  • \[([^\]]+)\]:捕获方括号内的内容作为组1,[^\]]+确保只匹配到第一个未转义的]
  • 组2的匹配逻辑:
    • [^\\{}]:匹配普通字符(排除\、{、})
    • \\.:匹配转义字符(比如\{、\}这类转义符号)
    • (?<!\\)\{(?:[^\\{}]|\\.)*?(?<!\\)\}:匹配非转义的嵌套花括号,确保内部的{}被完整纳入组2内容

获取所有匹配结果示例

用Python的re.findall()方法可以一次性获取所有匹配的组结果:

import re

# 测试文本
text = """
\\editable[blab]{\\textit{anna karenina}}
\\editable[test]{\\textbf{war and peace}}
\\editable[demo]{\\textit{abc{def}ghi}}
"""

# 选择对应场景的正则
pattern = r"\\editable\[([^\]]+)\]\{\\[a-zA-Z]+\{((?:[^\\{}]|\\.|(?<!\\)\{(?:[^\\{}]|\\.)*?(?<!\\)\})*)\}\}"
matches = re.findall(pattern, text)

# 输出所有结果
for idx, (group1, group2) in enumerate(matches, 1):
    print(f"匹配{idx}:")
    print(f"组1(方括号内容): {group1}")
    print(f"组2(目标内容): {group2}\n")

运行输出:

匹配1:
组1(方括号内容): blab
组2(目标内容): anna karenina

匹配2:
组1(方括号内容): test
组2(目标内容): war and peace

匹配3:
组1(方括号内容): demo
组2(目标内容): abc{def}ghi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:55:37