从匹配的正则表达式(VBA)中提取Excel字符串

时间:2015-03-24 15:28:00

标签: regex excel vba excel-vba

我想从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”

我只想采用匹配的模式。我怎样才能做到这一点?

感谢所有回复百万;)

2 个答案:

答案 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