Regex - hledání řádků a návrat hodnot   otázka

VB.NET

Po přečtení zdejšího seriálu o regexu se bezvýsledně

snažím sestavit pattern pro prohledání html textu.

Příklad řádku:

<TD><A href="ajmeno-von-de-aprijmeni"><IMG class=photo alt="" src="http://aweb.afotky.cz/asets/aimages/aglo..."></A></TD>

Snažím se vložit dvě <proměnné>, které budou vracet:

ajmeno-von-de-aprijmeni

http://aweb.afotky.cz/asets/aimages/aglo...

Výsledky chci dále roztřídit podle 'agroup' podle tipu zde:

"^http://(?<path>.+)/(?<file>[^\?/]*)(?<query>\?.+)?$"

Za případnou pomoc předem děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdá se mi, že na tohle bude lepší použít něco jako HtmlAgilityPack, který Vám přečte i HTML, které není zrovna validní a zveřejní jej pomocí rozhraní velmi podobnému XmlDocumentu (nebo HtmlDocumentu, pokud máte nějakou zkušenost s komponentou WebBrowser a MSHTML). Dále Vám pomůže naučit se XPath, pokud jej již neovládáte, protože poskytuje velmi hezkou cestu jak se dobrat toho správného prvku ve Vašem HTML dokumentu pomocí metod SelectNodes a SelectSingleNode třídy HtmlDocument z HtmlAgilityPack.

Vybrání prvku v Html ukazuje sekce Examples na stránkách HtmlAgilityPacku:

Dim document As New HtmlDocument()
document.Load("index.html")
For Each node As HtmlNode In document.SelectNodes("//a[href]")
  Console.WriteLine(String.Format("Nalezen odkaz na {0}.", node.Attributes("href").Value))
Next

HtmlAgilityPack naleznete na CodePlexu:

http://htmlagilitypack.codeplex.com

Krátký tutorial k XPath můžete nalézt třeba zde:

http://www.w3schools.com/xpath

Je dobré naučit se používat funkce v XPath, protože odstíní spoustu kódu, který by jinak padl na navigaci v tom HTML dokumentu a dobrání se správného elementu. S pomocí XPath buď element(y) najdete - úspěch, nebo dostanete null (Nothing ve Visual Basicu) a víte, že se buď změnila struktura HTML, které parsujete a nebo nastala nějaká jiná chyba.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Potrápilo mě, že SelectNodes není u dokumentu:

Dim doc As New HtmlAgilityPack.HtmlDocument()
        Dim web As New HtmlAgilityPack.HtmlWeb
        doc = web.Load(url)
        Dim docNode As HtmlAgilityPack.HtmlNode = doc.DocumentNode
        Dim nodes As HtmlAgilityPack.HtmlNodeCollection = docNode.SelectNodes("//a[href]")
        For Each node As HtmlAgilityPack.HtmlNode In nodes
            Debug.Print(String.Format("Nalezen odkaz na {0}.", node.Attributes("href").Value))
        Next

Zkusím se v tom zorientovat, zatím moc díky za tip.

Ohledně regulárního výrazu se mi daří sestavit

výraz, který vrací vyhovující řádky, avšak kámen

úrazu je začlenit do něj ty pojmenované skupiny,

to mi hlava nebere.

Díky autorovi za zdejší návod 'Regulární výrazy v .NET':

http://www.vbnet.cz/clanek--122-regularn...

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback