【问题标题】:Find text and replace with hyperlink查找文本并替换为超链接
【发布时间】:2011-09-19 05:39:49
【问题描述】:

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

【问题讨论】:

    标签: regex vba replace outlook


    【解决方案1】:

    看起来您最初是在正确的轨道上使用该注释掉的行。使用Replace 方法不需要循环匹配(这就是Global 标志的用途),并且可以使用$1$2 等反向引用作为匹配子字符串的占位符。与大多数语言一样,a dedicated page on Regular-Expressions.info 用于 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 &lt;a href='http://www.code.com/$1'&gt;$1&lt;/a&gt; 等,即不是您报告的内容。但是,Body = RegX.Replace(Body, "&lt;a href='http://www.code.com/$&amp;'&gt;$&amp;&lt;/a&gt;") 正确返回 Blah blah &lt;a href='http://www.code.com/ASA3422df'&gt;ASA3422df&lt;/a&gt; 等。
    • 嗯。有趣的。我直接从我的 VBE 窗口粘贴了结果,但我确实使用了 Excel 而不是 Outlook。也许有区别?
    • 我也在使用 Excel。 2003. 去看看!!
    • 确实很奇怪。适用于我的 XP 机器上的 2003 和 2007。我想这些怪癖有时会发生在外部库中,这很高兴知道。
    【解决方案2】:

    在 codedawn 上,有一个出色的 Excel 插件,它为您提供您熟悉和喜爱的相同 UI 搜索和替换,但适用于正则表达式。 http://www.codedawn.com/excel-add-ins.php

    虽然这不能完全帮助回答您的问题,但它对于在不更改数据或代码的情况下一个接一个地尝试正则表达式很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 2021-10-03
      • 1970-01-01
      • 2018-03-22
      • 2013-07-12
      • 1970-01-01
      • 2023-01-07
      相关资源
      最近更新 更多