[C#] Домашно Strings And Text Processing - 25 задача


20

 

25, Write a program that extracts from given HTML file its title (if available), and its body text without the HTML tags. Example:
 
<html>
  <head><title>News</title></head>
  <body><p><a href="http://academy.telerik.com">TelerikAcademy</a>
    aims to provide free real-world practical
    training for young people who want to turn into
    skillful .NET software engineers.</p></body>
</html>
 
Може би е раничко за тези задачи още, но поствам тази, за да ви подскажа за другите. Подсказката се състои в използване на регулярни изрази(regular expressions). 
Голяма, част от задачите могат да се решат с тях и спестява доста код и усилия. Ще се опитам да обесня моето решение.
 
1) Понеже идеята е да четем от HTML файл използваме класа StreamReader.
 
2) Използването на using ни подсигурява в това, че когато приключим работата с файла, стийма е затворен. 
 
3) В един while цикъл четем целия файл, ред по ред.
 
4) Тук идва важната част. Използваме MatchCollectionзащото искаме да ни мачне всики проявления на патерна в реда(патерн е тази последователност от символи, чрез която мачваме(селектираме,избираме) тази част от текста, която ни трябва). MatchCollection е еквивалента на /g (global).
В нашият случай патернът е следния - (?<=^|>)[^><]+?(?=<|$). С него му оказваме да мачне последователността от символи намиращи се между таговете > и <.
Има най-различни начини за мачване и най-различни вече готови патерни из интернет, за да не се налага да преоткриваме топлата вода.
 
5) С един foreach показваме всички мачнати колекции в реда, който сме прочели.
 
 
Задачи, от темата, които могат да се решат по-лесно и удобно с регулярни изрази: 4, 5, 12, 18,  25. За другите просто не съм сигурен как ще стане и дали ще е по-лесно. Предполагам, че ще ви послужат и на изпита. :)
 
Ресурси:
NetTuts - You Don’t Know Anything About Regular Expressions: A Complete Guide
NetTuts - 8 Regular Expressions You Should Know
NetTuts - Advanced Regular Expression Tips and Techniques
RegExr - Тул, който много олеснява работата с регулярни изрази. Има го и като програма, не само уеб приложение.

 




Отговори



0

Здравейте,

Така реших аз 25та задача - без регулярни изрази - http://pastebin.com/vbijZ1m3

На тази идея ми се базира цялата задача - int startTitle = htmlFileContent.IndexOf('>',htmlFileContent.IndexOf("<title>")) + 1;

Всеки път проверявам къде започва даден таг или отваряща скоба на таг и веднага търся затварящата такава като започвам търсенето от отварящата. Така знам като свърша отварящият таг - взимам информацията до следващата скоба за отварящ и така в цикъл.


от p.penchev (204 точки)


0

от Tanis (75 точки)