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 函数的分隔符?
换句话说,我们当然可以通过在分隔符列表中积极地识别分隔符来指定分隔符,但是有没有一种方法可以通过基本上说 - 让分隔符是除了这些列出的字符之外的所有内容来消极地识别分隔符?
应该可以使用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)