如何使用 RegExp 匹配两个模式

How to match two patterns with RegExp

我在一个单元格中有 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”放在一个单元格中。该代码还需要满足单一街道号码。任何建议都会有很大帮助。

您可以使用相同的交替,但从 \d+ & \d+

开始

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

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

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

您可能会使用:

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

Regex demo