Как сопоставить два шаблона с RegExp - PullRequest
1 голос
/ 05 мая 2019

У меня 50000 имен и адресов в одной ячейке, и я хочу выделить каждый элемент в отдельные ячейки ОДНАКО одна конкретная область вызывает головную боль. Некоторые из полей адреса содержат два числа для адреса улицы. Например, ячейка может содержать «Mr Smith 10 Rillington Place Exeter Devon», что хорошо, так как мой код разделяет название улицы города и округа. Но некоторые клетки содержат «Смит и сыновья Лтд. 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 Macro разбивает «10» и «12» на отдельные ячейки. В этих обстоятельствах я хочу, чтобы «10 и 12» были вместе в одной камере. Код должен также обслуживать один номер улицы. Любые предложения будут очень полезны.

1 Ответ

0 голосов
/ 05 мая 2019

Вы можете использовать то же чередование, но начать с \d+ & \d+

Вы можете опустить \[, потому что это соответствует литералу [, и этот символ будет сначала соответствовать \D, который не соответствует цифре.

Если вы намеревались создать класс символов , не выходя за пределы первой квадратной скобки, шаблон будет таким же, как [d+ &].

Но чередование не будет достигнуто, потому что все совпадения будут соответствовать либо \d, который соответствует цифре, либо \D, который не соответствует цифре.

Вы можете использовать:

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

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...