Regex 如何使用正则表达式从字符串中提取所有数字?

Regex 如何使用正则表达式从字符串中提取所有数字?,regex,ms-access,vba,Regex,Ms Access,Vba,我有一个表表1和一个字段电话。这是一个字符串字段,除数字外,还包含其他字符。我想从字符串中提取所有数字 我尝试了“[0-9]+”,但我只得到每行的第一组数字。 我尝试在线搜索,但我尝试的正则表达式与access不兼容。 请解释一下正则表达式。谢谢 这是我正在使用的VBA正则表达式函数: Function myRegex(ByRef myString As String, ByVal pattern As String) As String Dim rgx As New RegExp

我有一个表表1和一个字段电话。这是一个字符串字段,除数字外,还包含其他字符。我想从字符串中提取所有数字

我尝试了“[0-9]+”,但我只得到每行的第一组数字。 我尝试在线搜索,但我尝试的正则表达式与access不兼容。 请解释一下正则表达式。谢谢

这是我正在使用的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
。。。但我只得到每行的第一组数字

第一个问题是
.Global=False
意味着只找到第一个匹配项。如果要查找所有匹配项,则需要
.Global=True

第二个问题是,函数只返回
MatchCollection
中的第一个匹配(
colMatches(0)
)。因此,即使将
.Global
更改为
True
,函数仍将仅返回第一个匹配项。如果要返回包含所有匹配项的字符串,可以在
colMatches
中串联所有匹配项的值

下面的函数版本符合我的要求

函数myRegex(ByRef myString作为String,ByVal模式作为String)作为String
将rgx设置为新的RegExp
Dim colMatches作为MatchCollection
我想我会坚持多久
作为字符串的暗输出
使用rgx
.模式
.IgnoreCase=True
'.Global=False
.Global=True
.Multiline=False
Set colMatches=.Execute(myString)
以
如果colMatches.Count>0,则
'myRegex=colMatches(0).Value
对于i=0到(colMatches.Count-1)
strOutput=strOutput&colMatches(i).Value
下一个
”“否则呢
'myRegex=“”
如果结束
myRegex=strOutput
端函数

然而,我认为这是一个更简单的方法。这里的策略是丢弃任何不是数字的字符。将该函数与您的函数进行比较

您可以粘贴正在运行的代码段以执行正则表达式。您可能需要运行regex mutliple时间,而不仅仅是更改pattern@HansUp,“^\d”只匹配字符串的开头。@Rhumborl,我已经添加了代码,但我确实不想多次运行。我确信必须有一个正则表达式才能从字符串中提取所有数字。
OnlyDigits(“111Qs 233322”)
返回字符串“111233322”。如果这不是你想要的,请澄清你想要的。