从Excel VBA中的字符串中提取最后一个括号内的字符

从Excel VBA中的字符串中提取最后一个括号内的字符,excel,vba,string,extract,Excel,Vba,String,Extract,我的字符串是如下所示的文件名: 示例文本A12V1.1 示例V2文本A9 V2.3 8.99 示例文本A34 8.3 V4 如何仅提取以“V”开头但不包括“V”的字符串(仅包含在最后一个括号中) i、 e-1.1、2.3、4试试这个UDF Function ExtractByRegex(sTxt As String) With CreateObject("VBScript.RegExp") .Pattern = "V\d+(.)?(\d+)?" If .Test(sTxt) Th

我的字符串是如下所示的文件名:

示例文本A12V1.1

示例V2文本A9 V2.3 8.99

示例文本A34 8.3 V4

如何仅提取以“V”开头但不包括“V”的字符串(仅包含在最后一个括号中)

i、 e-1.1、2.3、4试试这个UDF

Function ExtractByRegex(sTxt As String)
With CreateObject("VBScript.RegExp")
    .Pattern = "V\d+(.)?(\d+)?"
    If .Test(sTxt) Then ExtractByRegex = .Execute(sTxt)(0).Value
End With
End Function
使现代化 这里是另一个版本,您可以在其中格式化输出

Sub Test_ExtractByRegex_UDF()
MsgBox ExtractByRegex("A9 V2.3 8.99")
End Sub

Function ExtractByRegex(sTxt As String)
With CreateObject("VBScript.RegExp")
    .Pattern = "V\d+(.)?(\d+)?"
    If .Test(sTxt) Then sTxt = Replace(.Execute(sTxt)(0).Value, "V", "")

    If Not InStr(sTxt, ".") Then sTxt = sTxt & "." & "000"
    ExtractByRegex = Split(sTxt, ".")(0) & IIf(InStr(sTxt, "."), ".", "") & Format(Split(sTxt, ".")(1), "000")
End With
End Function

VBA的字符串函数可以复制静态模式的结果,如果删除V前缀,您可能希望返回一个真数字


你已经试过什么了?这看起来是一个使用正则表达式的完美案例。非常好的YasserKhalil。正则表达式看起来确实非常强大。但是,现在我意识到我的输出不应该包括“V”。如何从提取中消除“V”?我添加了一个正确的函数,但我不确定这是否是正确的语法。Right.ExecutevTxt0.Value,Len.ExecutevTxt0-1您可以使用mid或像那样使用replace.ExecutesTxt0.Value,V,这非常有效,Yasserkhall。谢谢还有一件事:有没有办法用零填充数字的小数部分,使结果类似于-1.001、1.020、2.003、4.000等。?填充将在一长串值中显示得更好。YasserKhalil,您提供的UDF返回的文件名如下:IPV32_20.dll返回V32-20,IMV1.dll返回V1。。这些文件名不包含括号,因此不应返回。帮助
Option Explicit

Function ExtractWithoutRegex(sTxt As String)

    Dim b As Long, v As Long

    b = InStrRev(sTxt, "(")
    v = InStr(b, sTxt, "V")

    ExtractWithoutRegex = vbNullString

    If v > b Then
        sTxt = Mid$(sTxt, v + 1)
        sTxt = Split(sTxt)(0)
        ExtractWithoutRegex = Val(sTxt)
    End If

End Function