Jon*_*han 7 regex excel vba excel-vba
如何在正则表达式中获取第一个匹配结果的位置?见下文.
Function MYMATCH(strValue As String, strPattern As String, Optional blnCase As Boolean = True, Optional blnBoolean = True) As String
Dim objRegEx As Object
Dim strPosition As Integer
' Create regular expression.
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Pattern = strPattern
objRegEx.IgnoreCase = blnCase
' Do the search match.
strPosition = objRegEx.Match(strValue)
MYMATCH = strPosition
End Function
Run Code Online (Sandbox Code Playgroud)
首先,我不完全确定.Match返回的是什么(字符串,整数等).我找到的一个解决方案说我应该创建一个Match对象,然后从那里抓取位置,但与vb不同,vba不识别该Match对象.我也看过一些类似下面的代码,但我不一定要查找值,只是第一个字符串放置:
If allMatches.count <> 0 Then
result = allMatches.Item(0).submatches.Item(0)
End If
Run Code Online (Sandbox Code Playgroud)
有点忽略上面任何可能的语法错误(主要是由于我左右改变变量类型),我如何轻松/简单地完成此操作?
谢谢!
bre*_*tdj 12
您可以使用FirstIndex该Execute方法返回匹配位置,即
Function MYMATCH(strValue As String, strPattern As String, Optional blnCase As Boolean = True, Optional blnBoolean = True) As String
Dim objRegEx As Object
Dim strPosition As Integer
Dim RegMC
' Create regular expression.
Set objRegEx = CreateObject("VBScript.RegExp")
With objRegEx
.Pattern = strPattern
.IgnoreCase = blnCase
If .test(strValue) Then
Set RegMC = .Execute(strValue)
MYMATCH = RegMC(0).firstindex + 1
Else
MYMATCH = "no match"
End If
End With
End Function
Sub TestMe()
MsgBox MYMATCH("test 1", "\d+")
End Sub
Run Code Online (Sandbox Code Playgroud)
为了其他可能遇到这个问题的人的利益,我终于弄清楚了。
Option Explicit
Function CHAMATCH(strValue As String, strPattern As String, Optional blnCase As Boolean = True, Optional blnBoolean = True) As String
Dim objRegEx As Object
Dim objPosition As Object
Dim strPosition As String
' Create regular expression.
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Pattern = strPattern
objRegEx.IgnoreCase = blnCase
' Do the search match.
Set objPosition = objRegEx.Execute(strValue)
strPosition = objPosition(0).FirstIndex
CHAMATCH = strPosition
End Function
Run Code Online (Sandbox Code Playgroud)
而不是Match类型,只需常规Object类型即可(考虑到它返回的只是一个类)。然后,如果您想获取索引位置,只需.FirstIndex在[您选择的]匹配上使用,或者如果您想要该值,我们.Value