我在VBA工作并有一个正则表达式来识别模式ASA1234ss。 我正在将收件箱中某些项目模式转换为网址。
Body=objItem.HTMLBody
With RegX
.Pattern = "ASA[0-9][0-9][0-9][0-9][a-z][a-z]"
.Global = True
.IgnoreCase = Not MatchCase
End With
'Replacing the pattern with a hyperlink
Body = RegX.Replace(Body, "<a href='http://www.stack.com=$&'>$&</a>")
objItem.HTMLBody = Body
这仅适用于替换模式一次。但是当我再次执行宏时,超链接模式再次被替换为附加到它的相同文本。
例如:
示例输入
ASA8765jd
ASA7765jh
ASA8873hi
首次执行
<a href='http://www.stack.com=ASA8765jd'>ASA8765jd</a>
<a href='http://www.stack.com=ASA7765jh'>ASA7765jh</a>
<a href='http://www.stack.com=ASA8873hi'>ASA8873hi</a>
第二次执行
<a href='http://www.stack.com=<a href='http://www.stack.com=ASA8765jd'>ASA8765jd</a>'><a href='http://www.stack.com=ASA8765jd'>ASA8765jd</a></a>
<a href='http://www.stack.com=<a href='http://www.stack.com=ASA7765jh'>ASA7765jh</a>'><a href='http://www.stack.com=ASA7765jh'>ASA7765jh</a></a>
<a href='http://www.stack.com=<a href='http://www.stack.com=ASA8873hi'>ASA8873hi</a>'><a href='http://www.stack.com=ASA8873hi'>ASA8873hi</a></a>
第三次执行
<a href='http://www.stack.com=<a href='http://www.stack.com=<a href='http://www.stack.com=ASA8765jd'>ASA8765jd</a>'><a href='http://www.stack.com=ASA8765jd'>ASA8765jd</a></a>'><a href='http://www.stack.com=<a href='http://www.stack.com=ASA8765jd'>ASA8765jd</a>'><a href='http://www.stack.com=ASA8765jd'>ASA8765jd</a></a></a>
<a href='http://www.stack.com=<a href='http://www.stack.com=<a href='http://www.stack.com=ASA7765jh'>ASA7765jh</a>'><a href='http://www.stack.com=ASA7765jh'>ASA7765jh</a></a>'><a href='http://www.stack.com=<a href='http://www.stack.com=ASA7765jh'>ASA7765jh</a>'><a href='http://www.stack.com=ASA7765jh'>ASA7765jh</a></a></a>
<a href='http://www.stack.com=<a href='http://www.stack.com=<a href='http://www.stack.com=ASA8873hi'>ASA8873hi</a>'><a href='http://www.stack.com=ASA8873hi'>ASA8873hi</a></a>'><a href='http://www.stack.com=<a href='http://www.stack.com=ASA8873hi'>ASA8873hi</a>'><a href='http://www.stack.com=ASA8873hi'>ASA8873hi</a></a></a>
答案 0 :(得分:2)
为什么不止一次运行它? Global = True
表示它会在一次Replace
调用中替换每次出现的正则表达式。
答案 1 :(得分:2)
尝试一些lookarounds:
(?<!http://www.stack.com=)ASA\d{4}[a-z]{2}(?!</a>)
(我冒昧地将[0-9]
缩短为\d
并使用{}
量词。)
这将确保字符串不会立即跟随链接,也不会跟随超链接关闭标记。在行动here中查看。
如果您不想匹配单词的中间部分,可以在表达式之前和之后添加\b
,例如xxASA8765jdxx
。
答案 2 :(得分:1)
使用^
要求模式位于行的开头:
.Pattern = "^ASA[0-9][0-9][0-9][0-9][a-z][a-z]"
答案 3 :(得分:0)
尝试在正则表达式中添加单词边框标记:
.Pattern = "\bASA[0-9][0-9][0-9][0-9][a-z][a-z]\b"