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

时间:2016-06-29 12:41:53

标签: regex ms-access access-vba

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

enter image description here

我试过" [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

1 个答案:

答案 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()是一种更简单的方法。那里的策略是丢弃任何不是数字的字符。将此功能与您的功能进行比较。