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?
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ä.
Juuri näin, kiitokset Metabolix!
Aihe on jo aika vanha, joten et voi enää vastata siihen.