VBA(Microsoft Word)中如何使用正则表达式匹配内容至行尾
根因说明
VBScript 正则引擎默认仅将 \n(ASCII 10,标准换行符)判定为.元字符的排除匹配项,而 Word 文档里按下回车键生成的段落标记,实际存储的是 \r(ASCII 13,回车符),不属于.默认排除的字符范围,因此.会匹配到\r后继续向后匹配后续行内容,最终返回结果超出预期。
修复方案
修改正则匹配模式,明确指定遇到回车符就停止匹配即可,推荐使用排除字符组实现,无需调整正则其他属性:
把原模式numbers: .*替换为numbers: [^\r]*,[^\r]表示匹配除回车符以外的所有字符,遇到段落标记会自动终止匹配。
修正后完整代码
Public Sub TEST() Set regex = CreateObject("VBScript.RegExp") regex.Global = True For Each Match In findRegEx(ActiveDocument.Range, "numbers: [^\r]*") Debug.Print Match.Value Next End Sub
兼容软换行的扩展方案
如果需要匹配到Shift+回车生成的手动软换行就停止,可以把模式调整为numbers: [^\r\v]*,\v对应Word里的软换行符。
内容的提问来源于stack exchange,提问作者Dominic Venuti
相关产品推荐
相关产品推荐

