REGEX仅识别纯文本

时间:2011-06-21 19:58:42

标签: regex vba

我在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>

4 个答案:

答案 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"