我有一个跟随的字符串:
K9908098,G2342DF34324/234234323~234-234-234;R38724234+3D9083324T234Y 23E4234323
如何仅捕获包含字母和数字的子字符串,例如VBA 中的 K9908098
和 3D9083324T234Y
?
此模式 [A-Z\d]+
匹配所有子字符串,而此 ([A-Z]+\d+)+
不会抓取 3D9083324T234Y
。
最佳答案
您可以使用
\b(?=\d*[A-Z])(?=[A-Z]*\d)[A-Z\d]+\b
请参阅regex demo .
详细信息
\b
- 单词边界(?=\d*[A-Z])
-(正向前瞻要求)0 个以上数字后必须有一个大写 ASCII 字母(?=[A-Z]*\d)
- 0+ 个大写 ASCII 字母后必须有一个 ASCII 数字[A-Z\d]+
- 1+ 个大写 ASCII 字母或数字\b
- 单词边界。
查看 VBA 演示:
Dim regex As Object, allMatches As Object, match As Object
Dim s As String
s = "K9908098,G2342DF34324/234234323~234-234-234;R38724234+3D9083324T234Y 23E4234323"
Set regex = CreateObject("vbscript.regexp")
With regex
.Global = True
.MultiLine = False
.Pattern = "\b(?=\d*[A-Z])(?=[A-Z]*\d)[A-Z\d]+\b"
End With
Set allMatches = regex.Execute(s)
For Each match In allMatches
Debug.Print match.Value
Next
输出:
K9908098
G2342DF34324
R38724234
3D9083324T234Y
23E4234323
关于正则表达式 VBA : match specific substring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49951191/