我正在编写一个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中得到的结果:
因此,A列中的红色文字是初始字符串的完全匹配,B列中的红色是D,而D是分隔的匹配。所以它几乎就像我想要的那样,但我想只在单元格B-D中匹配而不是整个字符串。
对于示例中的瑞典语,我的数据集来自瑞典站点。但我觉得你还是遇到了问题?
答案 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)
表示获得第一个匹配,第一个捕获组值。