Здравствуйте, уже спрашивал этот вопрос на другом форуме но так и не дождался ответа... В общем есть 2 таблицы
| Код | <tr> <td>LocalHit</td> <td style="text-align: right;">63852,00</td> <td style="text-align: right;">86804,70</td> <td style="text-align: right;">0,00</td> </tr>
<tr> <td>Входящий трафик ADSL8192</td> <td style="text-align: right;">94598,26</td> <td style="text-align: right;">0,00</td> </tr>
|
Для них нужно составить универсальное регулярное выражение, т.е что бы подходило и под первую таблицу и под вторую, я составил вот такую регулярку:
| Код | <tr>\\s+<.*>(?:Входящий трафик (.*)|(.*))</td>\\s+<.*>(.*)</td>\\s+(?:<.*>(.*)</td>\\s+</tr>|<.*>(.*)</td>\\s+<.*>(.*)</td>\\s+</tr>)
|
Потом я эти данные заношу в listview:
| Код | foreach (Match match in matches) { GroupCollection Groups = match.Groups;
ListViewItem lvi = new ListViewItem();
if (Groups[1].Value != "") lvi.Text = Groups[1].Value; else lvi.Text = Groups[2].Value;
lvi.SubItems.Add(Groups[3].Value); lvi.SubItems.Add(Groups[5].Value);
if (Groups[4].Value != "") lvi.SubItems.Add(Groups[4].Value); else lvi.SubItems.Add(Groups[6].Value);
listView1.Items.Add(lvi); }
|
Но меня не устраивает что я должен делать проверки типа if (Groups[1].Value != ""). Вопрос, можно ли сделать это на уровне регулярного выражения, т.е что бы он уже возвращал нужное значение и тогда добавление в listview было бы таким:
| Код | foreach (Match match in matches) { GroupCollection Groups = match.Groups;
ListViewItem lvi = new ListViewItem();
lvi.Text = Groups["name"].Value; lvi.SubItems.Add(Groups["val1"].Value); lvi.SubItems.Add(Groups["val2"].Value); lvi.SubItems.Add(Groups["val3"].Value);
listView1.Items.Add(lvi); }
|
Результат для первой таблице должен получиться таким
| Код | Услуга |Вход. трафик|Исх. трафик|Начислено LocalHit 63852,00 86804,70 0,00
|
для второй
| Код | Услуга |Вход. трафик|Исх. трафик|Начислено ADSL8192 94598,26 0,00
|
Уже бьюсь несколько дней ... |