Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
5 / 5 / 5
Регистрация: 21.03.2013
Сообщений: 54
1

Регулярные выражения

26.03.2013, 12:27. Показов 1235. Ответов 7
Метки нет (Все метки)

Здравствуйте!
Есть строка из html документа.
Каким образом можно вытащить то, что выделено жирным?
Наверное, нужно сначала составить шаблон, но как потом действовать я не знаю.
<tr><td class="ranking">1</td>
<td class="rankingname"><a target="_blank" href="http://www.shanghairanking.com/Institution.jsp?param=Stanford University"><div align="left">Stanford University</div></a></td>

<td><div align="center"><img src=flag/UnitedStates.png style="border: solid 1px #B7A971"></div></td>

<td><div align="center">100</div></td><td><div align="center">100</div></td><td style="display: none;margin:0;text-align:center;"><div align="center">78.3</div></td><td style="display: none;margin:0;text-align:center;"><div align="center">100</div></td><td style="display: none;margin:0;text-align:center;"><div align="center">71.5</div></td><td style="display: none;margin:0;text-align:center;"><div align="center">97.4</div></td></tr><tr class="alt"><td class="ranking">2</td>
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2013, 12:27
Ответы с готовыми решениями:

Регулярные выражения - вывод сообщения об ошибке при нахождении в строке выражения, начинающегося с цифры
Нужно чтобы при нахождении в строке выражения начинающегося с цифры появлялось сообщение об...

Регулярные выражения
Есть такой текст: Тип объекта Квартира Тип дома Царский дом Этаж 15 Этажность 25 Общая...

Регулярные выражения
Нужно в выражении типу =А1+В78/7+3, заменить все ссылки на ячейки на значение в ячейки. Как...

Регулярные выражения
Приветствую, форумчане. Разрабатываю программу, позволяющую с помощью протокола http определить...

7
Администратор
Эксперт .NET
9191 / 4474 / 749
Регистрация: 17.04.2012
Сообщений: 9,272
Записей в блоге: 14
26.03.2013, 13:17 2
Вытаскивать информацию из HTML с помощь регулярных выражений очень сложно, а порой невозможно совсем. Облегчите себе жизнь и воспользуйтесь методами разбора XML
1
711 / 702 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
26.03.2013, 22:49 3
tezaurismosis, согласен с вами. Регулярками вытащить можно, главное - знать, что именно нужно вытаскивать. Однако иногда это действительно бывает сложно.
Вот ваше выражение, громоздкое, но иначе вроде никак.
C#
1
string pattern = "((?<=<div align=\"center\">)[A-z 0-8.]*?(?=</div>)|(?<=<div align=\"left\">)[A-z 0-8.]*?(?=</div>))";
P.S. И все равно оно лишнюю "сотню" захватывает!
1
168 / 131 / 29
Регистрация: 16.02.2013
Сообщений: 867
26.03.2013, 22:54 4
P.S. И все равно оно лишнюю "сотню" захватывает!
если ячейки в таблице статические - то можно откинуть ненужные найденные результаты
0
Master of Orion
Эксперт .NET
6088 / 4944 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.03.2013, 22:59 5
w221, непонятно, почему некоторые цифры вы учитываете, а некоторые - нет
0
5 / 5 / 5
Регистрация: 21.03.2013
Сообщений: 54
27.03.2013, 11:10  [ТС] 6
Ребята, всем спасибо.
Решил проблему с помощью Html Agility Pack
C#
1
2
3
4
string content = getRequest(@"http://www.shanghairanking.com/SubjectCS2012.html");
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(content);
            HtmlAgilityPack.HtmlNodeCollection UnivCollection = doc.DocumentNode.SelectNodes(@"//tr/td[2]/a/div");
где content- html код страницы.
В итоге в UnivCollection хранятся все вузы.
Кому интересно, информацию взял тут http://habrahabr.ru/post/114772/
0
Заблокирован
27.03.2013, 17:57 7
Я бы не стал грузить стороннюю библиотеку, поддерживающую Html, который может не следовать правилам XML (например, отсутствие ковычек в некоторых параметрах или закрывающих тегов), тем более, что придерживаться XML считается хорошим тоном всегда.

Можно сделать все проще, например условие (ваше, но со всеми корректировками по стандарту XML)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 //Пример 2 строки
            String init = @"
<table>
<tr>
<td class=|ranking|>1</td>
<td class=|rankingname|><a target=|_blank| href=|[url]http://www.shanghairanking.com/Institution.jsp?param=Stanford[/url] University|><div align=|left|>Stanford University</div></a></td>
<td><div align=|center|><img src=|flag/UnitedStates.png| style=|border: solid 1px #B7A971| /></div></td>
<td><div align=|center|>100</div></td>
<td><div align=|center|>100</div></td>
<td style=|display: none;margin:0;text-align:center;|><div align=|center|>78.3</div></td>
<td style=|display: none;margin:0;text-align:center;|><div align=|center|>100</div></td>
<td style=|display: none;margin:0;text-align:center;|><div align=|center|>71.5</div></td>
<td style=|display: none;margin:0;text-align:center;|><div align=|center|>97.4</div></td>
</tr>
<tr>
<td class=|ranking|>1</td>
<td class=|rankingname|><a target=|_blank| href=|[url]http://www.shanghairanking.com/Institution.jsp?param=Stanford[/url] University|><div align=|left|>Stanford University</div></a></td>
<td><div align=|center|><img src=|flag/UnitedStates.png| style=|border: solid 1px #B7A971| /></div></td>
<td><div align=|center|>100</div></td>
<td><div align=|center|>100</div></td>
<td style=|display: none;margin:0;text-align:center;|><div align=|center|>78.3</div></td>
<td style=|display: none;margin:0;text-align:center;|><div align=|center|>100</div></td>
<td style=|display: none;margin:0;text-align:center;|><div align=|center|>71.5</div></td>
<td style=|display: none;margin:0;text-align:center;|><div align=|center|>97.4</div></td>
</tr>
</table>
".Replace("|", "\"");
Решение:
C#
1
2
3
4
5
6
7
8
9
  //выбрать содержимое div в ячейках: 1,4,5,6,7 в каждой строке
            System.Xml.Linq.XDocument doc = System.Xml.Linq.XDocument.Parse(init, System.Xml.Linq.LoadOptions.PreserveWhitespace);
            var result1 = (from row in doc.Element("table").Elements("tr")
                           let res = from cell in row.Elements("td")
                                     select (cell.Descendants("div").FirstOrDefault() == null) ? String.Empty : cell.Descendants("div").FirstOrDefault().Value.ToString()
                           select res.ToArray()).Select(elem => new String[5] { elem[1], elem[4], elem[5], elem[6], elem[7] });
 
 
            //result1 -массив сторок с массивами результатов для каждой из них
Результат можно увидеть, например так:
C#
1
2
3
            foreach (var row in result1)
                foreach (var result in row)
                    Console.WriteLine(result);
1
5 / 5 / 5
Регистрация: 21.03.2013
Сообщений: 54
27.03.2013, 18:10  [ТС] 8
Спасибо, Urety
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2013, 18:10

Регулярные выражения
Добрый день. Помогите пожалуйста с реализацией регулярного выражения. Пример: Есть допустим...

Регулярные выражения
Здравствуйте, проблема заключается в том, что надо найти символы отличные от цифр, были идеи...

Регулярные выражения
Не могу разобраться с регулярными выражениями Скажем, у меня есть html код &lt;div id=&quot;mcont&quot;...

Регулярные выражения в c#
Здравствуйте уважаемые программисты вот передо мной стоит задача написать регулярное выражение,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru