Регулярное выражение для сопоставления данных с веб-страницы

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

Текст SomeAlpha CrLf CrLf 15 CrLf CrLf 123 132 143 CrLf CrLf 12313 CrLf CrLf 12/123

Где "SomeAlpha Text" — это просто текст с пробелом и, возможно, знаками препинания. Первое число находится между 1 и 30 000. Второй набор чисел (123 132 143) находится в диапазоне от 1 до 500 000 (каждое число). Следующее число находится где-то между 1 и 500 000. Окончательный набор: (1–30 000)/(1–30 000). Это код, который я собрал до сих пор:

Dim Pattern As String = "[.*]{1,100}" & vbCrLf & "" & vbCrLf & "[0-9]{1,4}" & vbCrLf & "" & vbCrLf & "[0-9]{1,6] [0-9]{1,6] [0-9]{1,6]" & vbCrLf & "" & vbCrLf & "[0-9]{1,6}" & vbCrLf & "" & vbCrLf & "[0-9]{1,5}/[0-9]{1,5}"

For Each match As Match In Regex.Matches(WebBrowser1.DocumentText.ToString, Pattern, RegexOptions.IgnoreCase)

        RichTextBox1.AppendText(match.ToString & Chr(13) & Chr(13))

Next

И в настоящее время я получаю 0 совпадений, хотя я знаю, что должно быть хотя бы 1 совпадение. Любые советы о том, где моя модель неверна, были бы замечательными! Спасибо.


person FraserOfSmeg    schedule 08.11.2013    source источник
comment
Можете ли вы подтвердить разрыв строки, который определенно совпадает. Меня не удивит, если этот vbCrLf не сработает. Попробуйте \r\n   -  person OGHaza    schedule 08.11.2013
comment
Возможно, вы сможете заменить нарушающие символы перед применением регулярного выражения, а затем вообще не беспокоиться о них.   -  person Mike Cheel    schedule 08.11.2013
comment
@OGHaza В VB.NET vbCrLf — это константа, равная "\r\n".   -  person The Guy with The Hat    schedule 01.12.2013


Ответы (1)


"[.*]{1,100}" & vbCrLf & "" & vbCrLf & "[0-9]{1,4}" & vbCrLf & "" & vbCrLf & "[0-9]{1,6] [0-9]{1,6] [0-9]{1,6]" & vbCrLf & "" & vbCrLf & "[0-9]{1,6}" & vbCrLf & "" & vbCrLf & "[0-9]{1,5}/[0-9]{1,5}"

имеет довольно много проблем:

  • * в "[.*]{1,100}" указывает предыдущему символу повторяться столько раз, сколько возможно, и поэтому не нужен. Замените его на ".{1,100}" или ".*"
  • Вы говорите, что первое число находится в диапазоне от 0 до 30000. "[0-9]{1,4}" допускает только 4 цифры (от 0 до 9999). Замените его на "[0-9]{1,5}", что позволяет использовать любое число от 0 до 99999.
  • Вы случайно поставили ] вместо } в трех местах этой части: "[0-9]{1,6] [0-9]{1,6] [0-9]{1,6]". Замените его на "[0-9]{1,6} [0-9]{1,6} [0-9]{1,6}"

Попробуйте сделать то, что я сказал выше. Он должен работать правильно.

person The Guy with The Hat    schedule 01.12.2013
comment
Спасибо. Я на самом деле исправил это сам, сделав почти то, что вы сказали! - person FraserOfSmeg; 02.12.2013