将几个正则表达式匹配写入excel中的不同单元格

时间:2017-03-02 14:54:36

标签: regex excel vba excel-vba

我正在编写一个excel宏以便能够搜索excel列表,并且除其他外,将匹配(如果有的话)写入不同的单元格。

我从this得到了很多帮助,但是我能解释的是如何才能将正则表达式匹配写入单元格。我当前的代码在匹配后剪切字符串并将其写入单元格。但是我只想写一下比赛,而不是字符串。

这是我的代码:

Private Sub simpleRegex()
Dim strPattern As String
Dim strReplace As String
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range

Set Myrange = ActiveSheet.Range("A1:A5")

For Each cell In Myrange
    strPattern = "(storlek|strl|stl|strlk|storleken|storl|size|storleksmärkt|storl|storlk|st)(.{0,2}?)((30|32|34|36|38|40|42|44|46|48|50))(.?)((30|32|34|36|38|40|42|44|46|48|50)?)"

    If strPattern <> "" Then
        strInput = cell.Value
        strReplace = "$1"

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

        If regEx.test(strInput) Then
            cell(1, 5).Value = 1
            cell(1, 2).Value = regEx.Replace(strInput, "$1")
            cell(1, 3).Value = regEx.Replace(strInput, "$2")
            cell(1, 4).Value = regEx.Replace(strInput, "$3")

        Else
            cell(1, 6).Value = 1
        End If
    End If
Next
End Sub 

这是我在Excel中得到的结果:

enter image description here

因此,A列中的红色文字是初始字符串的完全匹配,B列中的红色是D,而D是分隔的匹配。所以它几乎就像我想要的那样,但我想只在单元格B-D中匹配而不是整个字符串。

对于示例中的瑞典语,我的数据集来自瑞典站点。但我觉得你还是遇到了问题?

1 个答案:

答案 0 :(得分:0)

您需要使用.regEx.Execute(str)并访问SubMatches值:

Dim objMatchs As MatchCollection
' ...
Set objMatches = regEx.Execute(strInput)
If objMatches.Count <> 0 Then
  cell(1, 5).Value = 1
  cell(1, 2).Value = objMatches(0).SubMatches(0)
  cell(1, 3).Value = objMatches(0).SubMatches(1)
  cell(1, 4).Value = objMatches(0).SubMatches(2)
End If

捕获组ID以基于0的索引开头。

objMatches(0).SubMatches(0)表示获得第一个匹配,第一个捕获组值