我正在尝试用模式ASA替换正文中的文本#### @@到ASA #### @@(超链接)
如果正文中只有一个模式,我的代码就可以使用。
但如果我有很多模式,比如
ASA3422df
ASA2389ds
ASA1265sa
整个身体被替换为
ASAhuyi65
我的代码在这里。
Dim strID As String
Dim Body As String
Dim objMail As Outlook.MailItem
Dim temp As String
Dim RegExpReplace As String
Dim RegX As Object
strID = MyMail.EntryID
Set objMail = Application.Session.GetItemFromID(strID)
Body = objMail.HTMLBody
Body = Body + "Test"
objMail.HTMLBody = Body
Set RegX = CreateObject("VBScript.RegExp")
With RegX
.Pattern = "ASA[0-9][0-9][0-9][0-9][a-z][a-z]"
.Global = True
.IgnoreCase = Not MatchCase
End With
'RegExpReplace = RegX.Replace(Body, "http://www.code.com/" + RegX.Pattern + "/ABCD")
'if the replacement is longer than the search string, future .FirstIndexes will be off
Offset = 0
'Set matches = RegX.Execute(Body)
For Each m In RegX.Execute(Body)
RegExReplace = "<a href=""http://www.code.com/" & m.Value & """>" & m.Value & "</a>"
Next
Set RegX = Nothing
objMail.HTMLBody = RegExReplace
objMail.Save
Set objMail = Nothing
End Sub
答案 0 :(得分:1)
看起来你最初使用该注释掉的线路在正确的轨道上。使用Replace
方法不需要循环匹配(这是Global
标志的用途),并且可以使用$1
,$2
等反向引用作为匹配子串的占位符。与大多数语言一样,VBScript为a dedicated page on Regular-Expressions.info。
以下做你正在寻找的事情:
body = "Blah blah ASA3422df ASA2389ds ASA1265sa"
body = RegX.Replace(body, "<a href='http://www.code.com/$1'>$1</a>")
Debug.Print body
'-> Blah blah <a href='http://www.code.com/ASA3422df'>ASA3422df</a> <a href='http://www.code.com/ASA2389ds'>ASA2389ds</a> <a href='http://www.code.com/ASA1265sa'>ASA1265sa</a>
这会将匹配(以及仅匹配)替换为链接,并保持其他所有内容不受影响。
答案 1 :(得分:1)
在codedawn上,有一个出色的Excel加载项,可以为您提供相同的UI搜索并替换您熟悉和喜爱的内容,但是对于正则表达式。 http://www.codedawn.com/excel-add-ins.php
虽然这并不能完全帮助回答您的问题,但在不改变数据或代码的情况下逐个尝试正则表达式非常有用。