Найти текст и заменить гиперссылкой - PullRequest
3 голосов
/ 21 июня 2011

Я пытаюсь заменить текст в теле с шаблоном 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 голос
/ 21 июня 2011

На закодированном месте есть фантастическая надстройка для Excel, которая предоставляет вам тот же поиск и замену пользовательского интерфейса, который вы знаете и любите, но для регулярных выражений. http://www.codedawn.com/excel-add-ins.php

Хотя это не совсем помогает ответить на ваш вопрос, это полезно для проверки регулярных выражений друг за другом без изменения данных или кода.

1 голос
/ 21 июня 2011

Похоже, вы изначально были на правильном пути с этой закомментированной строкой.С помощью метода Replace не нужно зацикливать совпадения (для этого и нужен флаг Global), и он может использовать обратные ссылки, такие как $1, $2 и т. Д., В качестве заполнителей для соответствующих подстрок.Как и в большинстве языков, * выделенная страница на 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>

Это заменяет совпадения (и только совпадения) ссылкой и оставляет все остальное нетронутым.

...