【问题标题】:How to match two patterns with RegExp如何使用 RegExp 匹配两个模式
【发布时间】:2019-09-23 07:41:45
【问题描述】:

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

【问题讨论】:

    标签: regex excel vba excel-2007


    【解决方案1】:

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

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

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

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

    你可能会使用:

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

    Regex demo

    【讨论】:

    • 第四只鸟哇!杰出的!谢谢你。我有很多关于正则表达式的知识要学习,但是您指向我的网站将来肯定会有所帮助,您在这里的解释非常好。
    猜你喜欢
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    相关资源
    最近更新 更多