Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Attribuutti-arvo-parien parsiminen [VB.NET]

ajv [18.03.2010 11:23:53]

#

Mulla on tekstiä muodossa

parameter="a_speed" unit="%" value="0" default="5" min="0" max="100" description="Nominal speed"

ja tuosta pitäisi saada parsittua nuo nimi="arvo" -parit. Niitä ei ole mitenkään ennalta määrätty. Vaikka ensisilmäyksellä tämä saattaa vaikuttaa XML-dokumentin parsimiselta, tämä ei ole sitä, vaan päinvastoin. Em. "irrallinen" tekstirimpsu pitäisi saada nimenomaan jäsennettyä xml-solmun attribuuteiksi.

Ei vain taivu omat (VB.NET) regexp-taidot parsimaan tuota. Alla räpellystä

Imports System.Text.RegularExpressions
Module Module1

    Sub Main()

        Dim rx As New Regex("([a-z])='(.*)'")
        Dim text As String = "description='CraneKey ID number' min='0'"

        ' Find matches.
        Dim matches As MatchCollection = rx.Matches(text)

        ' Report the number of matches found.
        Console.WriteLine("{0} matches found in:", matches.Count)
        Console.WriteLine("   {0}", text)

        ' Report on each match.
        For Each match As Match In matches
            Dim groups As GroupCollection = match.Groups
            For Each item In groups
                Console.WriteLine(item.ToString)
            Next
        Next

        Console.ReadLine()
    End Sub

End Module

Vai olisiko tähän joku fiksumpikin tapa?

Metabolix [18.03.2010 13:17:35]

#

En ota kantaa VB.Net-puoleen, mutta säännöllinen lauseke toimisi näin:

([a-z]+)=("[^"]*"|'[^']*')

Otetaan siis yksi tai useampia pienaakkosia, =-merkki ja tämän jälkeen joko lainausmerkit, joiden välissä saa olla ei-lainausmerkkejä, tai hipsut, joiden välissä saa olla ei-hipsuja. Sisältö ei ole pakollinen, vaan myös tyhjät lainausmerkit kelpaavat.

Jos halutaan sallia lainausmerkit tekstissä esimerkiksi muodossa \" tai "", ne pitää lisätä tuonne ei-lainausmerkki-ryhmän kaveriksi:

"[^"]*"   ->   "([^"]|\\"|"")*"

Säännölliset lausekkeet ovat erittäin käyttökelpoinen tapa käsitellä tekstejä. Jos säännöstä alkaa tulla pitkä tai samat osat alkavat toistua, kannattaa sijoittaa lausekkeen osia kuvaavasti nimettyihin muuttujiin ja yhdistellä niitä, kuten eräässä PHP-vinkissä.

ajv [18.03.2010 13:35:13]

#

Juuri näin, kiitokset Metabolix!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta