Разделить строку в соответствии с регулярным выражением в VBScript - PullRequest
2 голосов
/ 23 июня 2010

Я хотел бы разбить строку на массив в соответствии с регулярным выражением, аналогичным тому, что можно сделать с помощью preg_split в PHP или VBScript Split , но с регулярным выражением на месте разделителя.

Используя объект VBScript Regexp, я могу выполнить регулярное выражение, но оно возвращает совпадения (поэтому я получаю коллекцию своих сплиттеров ... это не то, что я хочу)

Есть ли способ сделать это?

Спасибо

Ответы [ 3 ]

4 голосов
/ 23 июня 2010

Если вы можете зарезервировать специальную строку-разделитель, то есть строку, которую вы можете выбрать и которая никогда не будет частью реальной входной строки (возможно, что-то вроде "#@#"), тогда вы можете использовать замену регулярного выражения для замены всех совпаденийваш паттерн на "#@#" и , затем , разделенный на "#@#".

Другая возможность - использовать группу захвата.Если ваше регулярное выражение разделителя, скажем, \d+, то вы ищете (.*?)\d+, а затем извлекаете то, что группа захватила в каждом совпадении ( см. До и после на rubular.com ).

0 голосов
/ 24 апреля 2018

Я написал это для моего использования.Может быть, то, что вы ищете.

Function RegSplit(szPattern, szStr)
Dim oAl, oRe, oMatches
Set oRe = New RegExp
oRe.Pattern = "^(.*)(" & szPattern & ")(.*)$"
oRe.IgnoreCase = True
oRe.Global = True
Set oAl = CreateObject("System.Collections.ArrayList")

Do
    Set oMatches = oRe.Execute(szStr)
    If oMatches.Count > 0 Then
        oAl.Add oMatches(0).SubMatches(2)
        szStr = oMatches(0).SubMatches(0)
    Else
        oAl.Add szStr
        Exit Do
    End If  
Loop
oAl.Reverse
RegSplit = oAl.ToArray
End Function
'**************************************************************
Dim A
A = RegSplit("[,|;|#]", "bob,;joe;tony#bill")
WScript.Echo Join(A, vbCrLf)

Returns:
bob

joe
tony
bill
0 голосов
/ 23 июня 2010

Вы всегда можете использовать возвращенный массив совпадений в качестве входных данных для функции split.Вы разделяете исходную строку, используя первое совпадение - первая часть строки является первым разделением, а затем разделяется остаток строки (минус первая часть и первое совпадение) ... продолжается до завершения.

...