我的表格 table1 ,字段电话。这是一个字符串字段,除了数字之外还包含其他字符。我想从字符串中提取所有数字。
我试过" [0-9] +"但我只获得每一行中的第一组数字。 我尝试在线搜索,但我尝试的正则表达式与访问不兼容。 请解释正则表达式。感谢。
这是我使用的VBA正则表达式函数:
Function myRegex(ByRef myString As String, ByVal pattern As String) As String
Dim rgx As New RegExp
Dim colMatches As MatchCollection
With rgx
.pattern = pattern
.ignoreCase = True
.Global = False
.Multiline = False
Set colMatches = .Execute(myString)
End With
If colMatches.Count > 0 Then
myRegex = colMatches(0).Value
Else
myRegex = ""
End If
End Function
答案 0 :(得分:1)
...但我只获得每行中的第一组数字。
第一个问题是.Global = False
表示只查找第一个匹配项。如果您要查找所有匹配项,则需要.Global = True
第二个问题是你的函数只返回colMatches(0)
的第一个匹配(MatchCollection
)。因此,即使您将.Global
更改为True
,该函数仍会仅返回第一个匹配项。如果要返回包含所有匹配项的字符串,可以在colMatches
中连接所有匹配项的值。
以下版本的功能可以满足您的需求。
Function myRegex(ByRef myString As String, ByVal Pattern As String) As String
Dim rgx As New RegExp
Dim colMatches As MatchCollection
Dim i As Long
Dim strOutput As String
With rgx
.Pattern = Pattern
.IgnoreCase = True
'.Global = False
.Global = True
.Multiline = False
Set colMatches = .Execute(myString)
End With
If colMatches.Count > 0 Then
'myRegex = colMatches(0).Value
For i = 0 To (colMatches.Count - 1)
strOutput = strOutput & colMatches(i).Value
Next
'Else
'myRegex = ""
End If
myRegex = strOutput
End Function
但我认为OnlyDigits()是一种更简单的方法。那里的策略是丢弃任何不是数字的字符。将此功能与您的功能进行比较。