如何使用RegExp匹配两种模式

时间:2019-05-05 12:55:47

标签: regex excel vba excel-2007

我在一个单元格中有50,000个名称和地址,我想将每个元素提取到单独的单元格中,但是一个特定区域却令人头疼。一些地址字段包含街道地址的两个数字。例如,一个单元格可能包含“ Mr Smith 10 Rillington Place Exeter Devon先生”,这很好,因为我的代码将名称街道城市和县分开了。但是某些单元格包含“ Smith&Sons Ltd. 10&12 High Street Sutton Surrey。

我尝试过.Pattern = "(\d+|\D+|\[d+ & \d+])",但与.Pattern = "(\d+|\D+)"一样

Sub SplitTextNum2()
    Dim r As Range, rC As Range
    Dim Match, Matches
    Dim matchCount As Integer
    Columns("E").SpecialCells (xlCellTypeBlanks)
    On Error Resume Next
    Set r = Range("E1", Range("E50").End(xlDown))


    With CreateObject("VBScript.RegExp")
        .Pattern = "(\d+|\D+)"
        .Global = True
        For Each rC In r
            Set Matches = .Execute(rC.Value)
            For matchCount = 1 To Matches.Count
                rC.Offset(, matchCount).Value = Matches(matchCount - 1)
            Next
        Next rC
    End With
End Sub

我的VBA宏将“ 10”“&”“ 12”拆分为单独的单元格。在这种情况下,我希望将“ 10&12”保持在一个单元格中。该代码还需要满足单个街道号码。任何建议都会有很大帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用相同的替代方式,但以\d+ & \d+开头

您可以省略\[,因为它与文字[匹配,并且该字符将首先由\D匹配,而不是数字。

如果您打算通过不转义第一个方括号来创建character class,则该模式将与[d+ &]相同。

但是alternation不能到达那里,因为所有匹配项都将由匹配数字的\d或不匹配数字的\D匹配。

您可以使用:

(\d+ & \d+|\d+|\D+)

Regex demo