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

如何用负向前瞻/后顾正则避免Markdown关键词重复包裹[[ ]]?

问题分析与解决方案

当前方案的问题

  1. 单词边界\b的局限:当关键词前后是-、&这类非单词字符时,\b会错误识别为单词边界,导致匹配到[[...]]内部的关键词(比如ipsum-FOO&dolor里的FOO)。
  2. 块范围检查缺失:原正则仅判断关键词紧邻的前后不是[[/]],但对于[[ipsum FOO dolor]]这种块内的关键词,因为前面是空格而非[[,会被错误匹配。

修正后的正则与代码

要确保关键词不在任何[[ ... ]]块内部,同时避免重复包裹,可使用以下正则和代码:

import re

def wrap_terms_in_markdown(file_content, term_list):
    for term in term_list:
        # 核心正则:排除 [[ ... ]] 块内的关键词
        pattern = r'(?<!\[[^\]]*)({})(?![^\[]*\])'.format(re.escape(term))
        file_content = re.sub(pattern, r'[[\1]]', file_content)
    return file_content

正则解释

  • (?<!\[[^\]]*):负向后行断言,检查关键词前不存在[[开头且未闭合的内容,直接排除块内的关键词。
  • ({}):捕获目标关键词,用re.escape转义特殊字符,避免正则语法冲突。
  • (?![^\[]*\]):负向前行断言,检查关键词后不存在未闭合的]]结尾内容,进一步确保不在块内。

测试验证

所有测试用例均符合预期:

  • ✅ 匹配:lorem ipsum FOO dolor → lorem ipsum [[FOO]] dolor
  • ✅ 不匹配:lorem ipsum [[FOO]] dolor
  • ✅ 不匹配:lorem [[ipsum FOO dolor]] sit amet
  • ✅ 不匹配:lorem [[ipsumFOOsolor]] sit amet
  • ✅ 不匹配:[[lorem]] [[ipsum-FOO&dolor-sit.pdf#page=130]]

内容的提问来源于stack exchange,提问作者A. Ocannaille

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:53:20