Как мне записать шаблон, который охватывает несколько строк с помощью регулярных выражений? - PullRequest
0 голосов
/ 07 февраля 2019

Пожалуйста, помогите.Я прочитал десятки статей и онлайн-учебников по переполнению стека и не могу этого понять!

Мне нужно регулярное выражение, которое будет возвращать совпадение, охватывающее несколько строк, и я не уверен, как это сделать.сделай это.Например, текст:

1) 11 января 2019 г. 11:04 I RF HQCSQT

                    John Doe,Construction,555-555-5555,

2) 11-JAN-2019  1:42 PM  I   ADD  HQCSQT

                    John Doe/Construction Worker Request El
                    ectronic Add Wires: 7600SB=. Building c
                    odes: ,

3) 11-JAN-2019  1:54 PM  I   ADD  STM003

                    John Doe/Construction Worker Request El
                    ectronic Add Wires: 1430SBX=. Building
                    codes: ,

есть два совпадения, которые должны быть получены изнад строкой, которая является строкой 2 и строкой 3 до запятой (",").Ниже приведен пример совпадения.

2) 11-ЯНВ-2019 13:42 I ADD HQCSQT

                    John Doe/Construction Worker Request El
                    ectronic Add Wires: 7600SB=. Building c
                    odes: ,

Поэтому я хочу захватитьшаблон регулярного выражения, который начинается с

^\d\)\s+\d\d-\w+-\d+\s+\d+:\d+\s+\w+\s+I\s+ADD\s+(HQCSQT|STM003)

и заканчивается шаблоном регулярных выражений

(,\s)$ 

Примечание: я проверял "(, \ s) $" и так заканчивается строкакогда включена опция мультилинии.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Похоже, что его можно просто разделить двойной новой строкой:

Dim parts = Split(text, vbCrLf & vbCrLf)

For i = 0 To parts.Length Step 2
    Debug.Print(parts(i) & vbCrLf & vbCrLf & parts(i + 1) & vbCrLf & "------------")
Next
0 голосов
/ 07 февраля 2019

Ты уже там.Вы не должны правильно настраивать параметры регулярных выражений.Вам необходимо использовать режимы SingleLine и MultiLine одновременно.

Dim input As String = "
1) 11-JAN-2019 11:04 AM I RF HQCSQT

                    John Doe,Construction,555-555-5555,

2) 11-JAN-2019  1:42 PM  I   ADD  HQCSQT

                    John Doe/Construction Worker Request El
                    ectronic Add Wires: 7600SB=. Building c
                    odes: ,

3) 11-JAN-2019  1:54 PM  I   ADD  STM003

                    John Doe/Construction Worker Request El
                    ectronic Add Wires: 1430SBX=. Building
                    codes: ,
"
Dim pattern As String = "^\d\)\s+\d\d-\w+-\d+\s+\d+:\d+\s+\w+\s+I\s+ADD\s+(HQCSQT|STM003).*?,\s$"
Dim matches As Integer = Regex.Matches(input, pattern, RegexOptions.Multiline Or RegexOptions.Singleline).Count
Console.WriteLine(matches)  ' Outputs "2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...