查找文本并替换为超链接。

3

我正在尝试用模式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
2个回答

1

看起来你最初使用的那行注释是正确的。使用Replace方法时不需要循环匹配(这就是Global标志的作用),可以使用反向引用,如$1$2等,作为匹配子字符串的占位符。与大多数语言一样,VBScript也有关于正则表达式的专门页面

以下代码将实现你要求的功能:

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>

这将用链接替换匹配项(仅替换匹配项),并保留其他所有内容不变。


刚测试了一下,它返回的是 Blah blah <a href='http://www.code.com/$1'>$1</a> 等等,也就是不是你所报告的结果。然而,Body = RegX.Replace(Body, "<a href='http://www.code.com/$&'>$&</a>") 正确地返回了 Blah blah <a href='http://www.code.com/ASA3422df'>ASA3422df</a> 等等。 - Jean-François Corbett
嗯,有趣。我从我的VBE窗口直接复制了结果,但我使用的是Excel而不是Outlook。也许有所不同? - Greg Haskins
我也在使用Excel,版本是2003。想象一下吧! - Jean-François Corbett
确实非常奇怪。在我的XP机器上,2003和2007都可以运行。我想这些外部库有时会出现这种怪癖,这是一个好的知识点。 - Greg Haskins

1
在codedawn网站上,有一个非常棒的Excel插件,它为您提供了与您熟悉和喜爱的UI搜索和替换相同的功能,但用于正则表达式。 http://www.codedawn.com/excel-add-ins.php 虽然这并不能完全回答您的问题,但它对于尝试一个接一个地使用正则表达式而不更改数据或代码非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接