Как я могу адаптировать шаблон регулярных выражений для VBA - PullRequest
0 голосов
/ 18 сентября 2019

Я пытаюсь удалить определенную строку текста с помощью регулярных выражений, и у меня есть следующее, которое работает на regex101.com, однако я понимаю, что у VBA есть некоторые нюансы при использовании регулярных выражений, и шаблон, который у меня, кажется, не работает вообще.

шаблон, который я проверил, приведен в приведенном ниже коде. Если возможно, я бы также хотел объединить его с нижеприведенным (предназначенным для удаления тегов html) «\ <. *?>», Это работает, но в настоящее время язапустите отдельную функцию regex.replace, чтобы удалить это.

Dim regEx As Object , str As String
Set regEx = CreateObject("VBScript.RegExp")

With regEx
  '.Pattern = "<a\b([^>""']|""[^""]*""|'[^']*')+class=""changed-by"">.*?<\/a>"
'.pattern = "\<.*?\>" ' this is the second pattern i use to remove html tages which works
  .Global = True 'If False, would replace only first
  .IgnoreCase = False
  .MultiLine = False
End With

str = some text here <a href="/instrument/2014/36.pdf" target="_blank" title="2014/36 - 01/07/2014" class="changed-by">1</a> some text here
Debug.Print regEx.Replace(str, "")

1 Ответ

0 голосов
/ 19 сентября 2019

Если вы собираетесь использовать функцию Replace, я думаю, вам нужны некоторые выходные параметры, замена того, что вы найдете на "", всегда вернет "".Это то, что я придумал, я не уверен, что Regex лучше, чем у вас на самом деле, но он работает в VBA.Основным отличием является первая и последняя группы, которые я добавил для извлечения всего текста.

Dim RegEx As New RegExp
Dim Value As String

RegEx.IgnoreCase = True
RegEx.Pattern = "(.*?)<a\b(?:""[^""]*?""|'[^']*?'|[^>]*?)+>([^<]*?)<\/a\b.*?>(.*)"
Value = "some text here <a href=""/instrument/2014/36.pdf"" target=""_blank"" title=""2014/36 - 01/07/2014"" class=""changed-by"">1</a> some text here"
Debug.Print RegEx.Replace(Value, "$1$2$3")

Другой вариант заключается в том, что вы просто используете функцию Execute и извлекаете текст из соответствующих групп..

Dim Col As MatchCollection
Dim i As Long
Set Col = RegEx.Execute(Value)
With Col
    For i = 0 To .Count - 1
        With .Item(i)
            Debug.Print .SubMatches(0) & .SubMatches(1) & .SubMatches(2)
        End With
    Next
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...