EXCEL VBA 拆分函数 - 指定所有符号和字母作为分隔符

Dan*_*Dan 2 string excel vba text-extraction

我正在使用 EXCEL VBA,并且有大量这样的字符串:

str = "aei jt098_374!6.90*9U35t9miK34=90^1-349j582ge&%$g2=045 un=n20#^9i1=n5g76]90 82n3]-568@2^68*)85f1=0947f]287j"
Run Code Online (Sandbox Code Playgroud)

我需要从这些字符串中提取所有数字,同时识别所有非数字字符(所有字母和所有符号作为分隔符(句点 (.) 除外))。例如,从上面的示例字符串中提取的前几个数字的值应该:

098
374
6.90
9
35
9
Run Code Online (Sandbox Code Playgroud)

我可以想象使用 VBA 中的 Split 函数执行此操作,但是:如何指定除句点 (.) 之外的所有大写和小写字母以及所有符号作为分隔符(包括空格)?

有没有办法指定除 0 到 9 和 . 作为 Split 函数的分隔符?

换句话说,我们当然可以通过在分隔符列表中积极地识别分隔符来指定分隔符,但是有没有一种方法可以通过基本上说 - 让分隔符是除了这些列出的字符之外的所有内容来消极地识别分隔符?

Big*_*Ben 7

应该可以使用regex

' Under Tools > References
' add a reference to Microsoft VBScript Regular Expressions 5.5
Sub ExtractTheNumbers()
    Dim s As String
    s = "aei jt098_374!6.90*9U35t9miK34=90^1-349j582ge&%$g2=045 un=n20#^9i1=n5g76]90 82n3]-568@2^68*)85f1=0947f]287j"

    Dim regEx As RegExp
    Set regEx = New RegExp
    
    With regEx
        .Global = True
        .MultiLine = False
        .Pattern = "\d+\.?\d*"
    End With

    Dim matches As MatchCollection
    Set matches = regEx.Execute(s)
            
    Dim m As Match
    For Each m In matches
        Debug.Print m.Value
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

回报

098
374
6.90
9
35
9
34
90
1
349
582
2
045
20
9
1
5
76
90
82
3
568
2
68
85
1
0947
287
Run Code Online (Sandbox Code Playgroud)