[ruby-de] RegEx

Norbert Melzer timmelzer at gmail.com
Mo Aug 28 20:30:06 JST 2017


Für das Parsen von XML Dokumenten würde ich dir eine spezialisierte XML
library empfehlen. Nokogiri hast du schon genannt, birgt aber das Problem
einer nativen Abhängigkeit. Es gibt mit sicherheit auch "pure" Ruby
implementationen einer XML-Lib. Mit RegEx-Based captures wirst du auf Kurz
oder lang nur Probleme haben.

Zur "greedy" Regex:

https://ruby-doc.org/core-2.1.0/Regexp.html#class-Regexp-label-Repetition
beschreibt
wie man durch hinzufügen eines Fragezeichens die greedy quantifier "lazy"
oder "non-greedy" bekommt: `<.+?>` zieht nur <a> aus "<a><b>".

Pd Dzaic <pddzaic at gmail.com> schrieb am Mo., 28. Aug. 2017 um 13:20 Uhr:

> Hallo zusammen
>
> Anbei habe ich den Auszug einer Datei angehängt, die ich gerne parsen und
> deren Inhalt in von mir erzeugte Objekte einfügen möchte. Ich weiss nicht,
> ob nokogiri das richtige Werkzeug wäre, sodass ich es erst einm "manuell"
> probiere. Nehmen wir Beispielsweise folgenden Zeilenaisschnitt:
>
> <Results PointEst="0.00261923926882446" Mean="0.00260549806989729"
> MeanHigh="0.002916131" MeanLow="0.002294865" Pct95="0.00938510149717331"
> Pct95High="0.01138707" Pct95Low="0.0076281" Pct5="0.000308111077174544"
> Pct5High="0.0003357831" Pct5Low="0.0002913048" Median="0.00125825370196253"
> MedianHigh="0.00134209" MedianLow="0.001182895"
> StdDev="0.00501187797635794" Skewness="7.728384" Kurtosis="84.44475"
> SamplesAt10pct="1421" SamplesAt2pct="35536" ErrorFactor="5.519069">
>
> Nun möchte ich beispielsweise in meine Variable @point_estimate den Wert
> einlesen. Dazu bediene ich mich einer Regex, dachte ich mir. Sie obiger
> Text der Inhalt der Variablen a, dann folgt:
>
> if a.match /PointEst="(.+)"/
>   @point_estimate = $1
> end
>
> Leider funktioniert es so nicht, da mir der .+ (der Greedy-Operator wie ich
> mittlerweile erfahren habe) alles bis zum letzten Anführungszeichen aus dem
> String herausholt. Das ist auch kein Fehler, da der Greedy-Operator das
> wohl macht. ich hingegen möchte jedoch, dass schon nach dem ersten
> Anführungszeichen abgebrochen wird.
>
> Hat jemand eine Idee?
>
> Bin für andere Vorschläge auch offen.
>
> Gruss,
>
> Pere
>


Mehr Informationen über die Mailingliste ruby-de