正则提取反编译DOC内容时误包含\hich、匹配异常问题求助
DOC反编译内容提取正则修复方案
现有正则的核心问题
你写的正则存在4处逻辑错误,直接导致后缀被吞、跨行匹配失效:
- 前缀规则冗余混乱:额外加入了无意义的单个空格匹配项,会导致任意空格位置都被识别为匹配起点,完全打乱边界;同时前缀分支没有按长度排序,双空格的
f38存在被短分支拦截、无法命中的问题 - 匹配主体适配性差:默认正则规则下
.不会匹配换行符,直接导致跨多行的目标内容匹配中断;同时使用贪婪匹配.+,遇到边界标记时会出现非预期回溯 - 后缀规则存在语法和逻辑错误:
- 元字符
{、}未转义,会被部分正则引擎识别为量词标记,导致匹配逻辑错乱 - 单独加入的
\\匹配项优先级高于\\hich、\\par等完整标记,会导致反斜杠开头的后缀永远无法被完整识别 - 空字符串是无效匹配规则,写在分支中不产生任何约束效果
- 后缀分支未按长度从长到短排序,短分支会提前拦截长分支的匹配
- 元字符
- 未适配标记大小写差异:反编译生成的DOC控制符可能出现大小写混写(比如
\HICH和\hich),大小写敏感模式下会漏识别后缀
修复后可用正则
(?<=f38 |f38 |f1 |\.\.)[\s\S]+?(?=\\par|\\cell |\\hich|\{|\}|\.\.)
使用说明
- 匹配时需要开启两个flag:全局匹配(
g)、大小写不敏感匹配(i) - 正则中用
[\s\S]+?做非贪婪全字符匹配,不需要额外开启单行模式即可覆盖跨行场景,匹配结果会自动截断在控制符前,不会把\hich、\par等后缀内容纳入结果 - 如果匹配结果首尾存在多余空白,拿到结果后单独做trim处理即可
内容的提问来源于stack exchange,提问作者Michael Callahan
相关产品推荐
相关产品推荐

