Regex за съпоставяне на данни от уеб страница

Това вероятно е прост въпрос за някой с опит с regex, но имам малък проблем. Търся да съпоставя редове с данни като тези, показани по-долу:

SomeAlpha Text 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