VBA регулярное выражение: как извлечь точное повторяющееся совпадение в начале, между, в конце строки - PullRequest
0 голосов
/ 28 июня 2018

Я безуспешно пытаюсь извлечь повторяющееся слово внутри строки, используя RegEx в Excel VBA.

В следующем примере:

Я безуспешно пытаюсь извлечь повторяющееся слово внутри строки, используя RegEx в Excel VBA.

Следуя примеру:

Sub RegExTest()

 Dim re As Object
 Dim el As Object
 Const strText As String = "Fld,Fld,Fld,Fld,Fld,aFld1,bFld,cFld,Fld"
 Debug.Print strText
 With CreateObject("VBScript.RegExp")
  .Global = True
  .MultiLine = False
  .IgnoreCase = False
  .pattern = "(^Fld\,|\,Fld\,|\,Fld$)"
  If .Test(strText) Then
   Set re = .Execute(strText)
  End If
 End With
 For Each el In re
  Debug.Print el
 Next
End Sub

Result:
Fld,Fld,Fld,Fld,Fld,aFld1,bFld,cFld,Fld
Fld,
,Fld,
,Fld,
,Fld

Результат, который я получаю (4 элемента), не соответствует ожиданиям (6 элементов).

Я уверен, что речь идет о неправильном определении шаблона.

Может кто-нибудь помочь с правильным шаблоном?

Заранее спасибо

1 Ответ

0 голосов
/ 28 июня 2018

Проблема в том, что ваши совпадения перекрываются. Под этим я подразумеваю, что запятая в Fld\, уже совпадает, поэтому ваш второй Fld не будет совпадать с \,Fld\,

Если вы удвоите запятые, вы увидите, что у вас есть соответствующее количество совпадений

Решение здесь состоит в том, чтобы использовать ловушки для захвата ваших совпадений. Если вам по какой-то причине нужны конечные запятые, просто добавьте их к соответствующим совпадениям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...