如何匹配指定字符串以外的内容?(适配InDesign GREP)
InDesign GREP 优化解决方案
你遇到的问题核心是要避免重复书写目标字符串box,同时实现原表达式的匹配效果。之前用\2不生效是因为表达式里仅定义了一个捕获组(box),对应的反向引用应为\1,但直接用\w+(?=(box))|(?<=\1)\w+仍有问题——匹配第二个分支时,第一个分支的捕获组未被触发,\1无法正确引用。
针对InDesign的GREP语法,推荐两种可行方案:
方案1:命名捕获组
通过命名捕获组统一管理目标字符串,后续仅需修改一处即可:
\w+(?=(?P<target>box))|(?<=(?P=target))\w+
(?P<target>box):定义名为target的捕获组,内容为box(?P=target):反向引用该命名组,确保两处引用的是同一个目标字符串
方案2:分支重置组
利用分支重置组让所有分支共享捕获组编号,实现单次定义多次引用:
(?|\w+(?=(box))|(?<=\1)\w+)
(?|...):分支重置标记,内部分支共用捕获组编号- 第一个分支的
(box)是捕获组1,第二个分支的(?<=\1)可直接引用该组
简化思路(针对你的输入输出场景)
从提供的输入输出来看,你的实际需求是删除所有box字符串,此时无需复杂表达式——直接用GREP查找box,替换为空即可,完全避免重复书写目标字符串,效率更高。
内容的提问来源于stack exchange,提问作者Christoffer Andersen
相关产品推荐
相关产品推荐

