我想从Excel VBA中的给定字符串中提取匹配的RegExp模式。
例如,
鉴于此表达式:
"[0-9]*\+[0-9]{3}\@[0-9]*\+[0-9]{3}"
来自此字符串: “CSDT2_EXC_6 + 000 @ 6 + 035_JM_150323”
我想得到:“6 + 000 @ 6 + 035”
但我不知道如何做到这一点。
我能得到的最近的是:
Function getStations(file_name As String)
'Use Regular Expressiosn for grabbing the input and automatically filter it
Dim regEx As New RegExp
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = True
'This matches the pattern: e.g. 06+900@07+230
.Pattern = "[0-9]*\+[0-9]{3}\@[0-9]*\+[0-9]{3}"
End With
If regEx.Test(file_name) Then
strReplace = ""
getStations = regEx.Replace(file_name, strReplace)
Else
getStations = "Hay un problema con el nombre. Por favor, arréglalo"
End If
End Function
但这会给我带来以下内容: “CSDT2_EXC__JM_150323”
我只想采用匹配的模式。我怎样才能做到这一点?
感谢所有回复百万;)
答案 0 :(得分:8)
您可以使用:
Function getStations(file_name As String)
'Use Regular Expressiosn for grabbing the input and automatically filter it
Dim regEx As New RegExp
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = True
'This matches the pattern: e.g. 06+900@07+230
.Pattern = "[0-9]*\+[0-9]{3}\@[0-9]*\+[0-9]{3}"
End With
If regEx.Test(file_name) Then
getStations = regEx.Execute(file_name)(0)
Else
getStations = "Hay un problema con el nombre. Por favor, arréglalo"
End If
End Function
答案 1 :(得分:2)
对Rory的优秀答案提出了一些小建议(假设你的初始职能有冗余):
Function getStations(file_name As String) As String
'Use Regular Expressionn for grabbing the input and automatically filter it
Dim regEx As Object
Set regEx = CreateObject("vbscript.regexp")
regEx.Pattern = "[0-9]*\+[0-9]{3}\@[0-9]*\+[0-9]{3}"
If regEx.Test(file_name) Then
getStations = regEx.Execute(file_name)(0)
Else
getStations = "Hay un problema con el nombre. Por favor, arréglalo"
End If
End Function