如何在VBA正则表达式模式中使用三个Negative lookahead?
正则表达式修改需求与解决方案
现有正则模式
我正在使用以下正则表达式模式:
\b[Mm]od(?!er).*\b[hH]\b
现有正则各部分解释
\b- 单词边界,断言后续内容前无其他单词字符[Mm]od- 匹配大小写m后跟od的字符串(?!er)- 负向前瞻,断言当前位置后不跟er.*- 贪婪匹配除换行符外的任意0个及以上字符\b[hH]\b- 匹配带单词边界的单个大小写h字符
需求说明
基本需求
匹配包含以mod开头单词的单元格,但排除以Modif、Moder、Modr开头的单词;同时内容中必须存在单个大小写h字符。
具体要求
在现有负向前瞻(?!er)的基础上,添加针对Modif和Modr的负向前瞻规则。
验证示例
| 内容 | 正则预期结果 |
|---|---|
| new modified of module h 1 | TRUE |
| of mod H | TRUE |
| new of mod_H | TRUE |
| new moderate of mod_H | TRUE |
| to modules (A & h) | TRUE |
| new modified and moderate H | FALSE |
| new modification of A mod_A | FALSE |
| to modules (D & E) | FALSE |
| to mode (F, G & A) | FALSE |
修改后的正则与VBA代码
修改后的正则模式
\b[Mm]od(?!er)(?!if)(?!r).*\b[hH]\b
正则修改说明
新增两个负向前瞻:
(?!if):断言mod后不跟if,排除Modif开头的单词(?!r):断言mod后不跟r,排除Modr开头的单词
也可以将多个负向前瞻合并为更简洁的写法,效果完全一致:
\b[Mm]od(?!(er|if|r)).*\b[hH]\b
更新后的VBA函数
Public Function RegexMtch(str) As Boolean With CreateObject("vbscript.regexp") .Pattern = "\b[Mm]od(?!er)(?!if)(?!r).*\b[hH]\b" RegexMtch = .Test(str) End With End Function
内容的提问来源于stack exchange,提问作者Waleed
相关产品推荐
相关产品推荐

