2015-03-16 3 views
1

У меня проблема с использованием regexp в excel macro, вызывая regex.execute (string), вместо того, чтобы получать массив возвращаемых групп захвата, я всегда получаю одиночный возврат, который представляет собой всю строку, указанную в шаблон. Используя тот же шаблон в http://www.regexr.com/, я вижу, что доход хорошо сгруппирован. Что я упускаю из этого:excel VB regexp 5.5 группа захвата

Private Sub ParseFileName(strInput As String) 
    Dim regEx As New RegExp 
    Dim strPattern As String 
    Dim strReplace 

    'Sample string \\Work_DIR\FTP\Results\RevA\FTP_01_01_06_Results\4F\ACC2X2R33371_SASSSD_run1 
    strPattern = "FTP_(\w+)_Results\\(\w+)\\([\d,\D]+)_(SAS|SATA)(HDD|SSD)_run(\d)" 

    With regEx 
     .Global = True 
     .MultiLine = False 
     .IgnoreCase = False 
     .Pattern = strPattern 
    End With 

    If regEx.Test(strInput) Then 
     Set strReplace = regEx.Execute(strInput) 
     ActiveCell.Offset(0, 1) = strReplace.Count 
    Else 
     ActiveCell.Offset(0, 1) = "(Not matched)" 
    End If 
End sub 

В конце концов, strReplace.Count всегда показывает 1, что вся строка FTP_01_01_06_Results \ 4F \ ACC2X8R133371_SASSSD_run1

ответ

2

Используйте .SubMatches, чтобы получить захватив группы значений:

Private Sub ParseFileName(strInput As String) 
    Dim regEx As New RegExp 
    Dim strPattern As String 
    Dim strReplace As MatchCollection 
    Dim i As Long 

    'Sample string \\Work_DIR\FTP\Results\RevA\FTP_01_01_06_Results\4F\ACC2X2R33371_SASSSD_run1 
    strPattern = "FTP_(\w+)_Results\\(\w+)\\([\d,\D]+)_(SAS|SATA)(HDD|SSD)_run(\d)" 

    With regEx 
     .Global = True 
     .MultiLine = False 
     .IgnoreCase = False 
     .Pattern = strPattern 
    End With 

    If regEx.Test(strInput) Then 
     Set strReplace = regEx.Execute(strInput) 
     ActiveCell.Offset(0, 1) = strReplace.Count 
     For i = 0 To 5 
      ActiveCell.Offset(i + 1, 1) = strReplace(0).SubMatches(i) 
     Next 
    Else 
     ActiveCell.Offset(0, 1) = "(Not matched)" 
    End If 
End Sub 
+0

Удивительно, это работает! Большое спасибо! Извините, не могу повышать – SamDaMan

Смежные вопросы