.Replace
Иногда мало найти все соответствия регулярному выражению, а ещё нужно совпадения на что-нибудь заменить.
'Поиск по регулярному выражению и замена.
Public Function RegExpFindReplace(str As String, _
Pattern As String, _
Replace As String, _
Optional Globa1 As Boolean = True, _
Optional IgnoreCase As Boolean = False, _
Optional Multiline As Boolean = False) _
As String RegExpFindReplace = str
'Пока ничего не меняли
If Not str Like "" And Not Pattern Like "" Then
Dim RegExp As Object 'Для регулярного выражения
Set RegExp = CreateObject("VBScript.RegExp")
With RegExp
'Все совпадения или только первое?
.Global = Globa1
.IgnoreCase = IgnoreCase 'Регистр неважен?
'Игнорировать переносы строк?
.Multiline = Multiline
.Pattern = Pattern 'Регулярка
End With
'Найти/заменить
On Error Resume Next
RegExpFindReplace = RegExp.Replace(str, Replace)
Set RegExp = Nothing 'Очистка памяти
End If
End Function
Пример использования в проекте:
Dim strOriginal As String 'Оригинальная строка
Dim strResult As String 'Результат после замены
Dim strPattern As String 'Регулярное выражение
Dim strReplace As String 'На что меняем
strOriginal = "Удаление лишних пробелов."
'Более двух пробелов подряд...
strPattern = "\s{2,}"
'... меняем на один пробел
strReplace = " "
strResult = RegExpFindReplace(strOriginal, _
strPattern, strReplace)
'Сообщение: "Удаление лишних пробелов."
MsgBox strResult
Ну, и перед тем как использовать в своих макросах регулярные выражения, не забудьте в редакторе VBE подключить DLL для работы с ними. Для тестирования в VBA регулярных выражений можно воспользоваться excel-приложением RegExp_Tester.