2017-07-12 4 views
-1

Ich versuche, eine Datei mit mehreren Zeilen zu lesen wie folgt:Differenziert die Zeichenfolge mit doppelten Anführungszeichen aus Zeichenfolge ohne Anführungszeichen mit regex

<Property authority="Design" name="X">2538.0</Property> 
    <Property authority="Design" name="Y">-226.084564</Property> 
    <Property authority="Design" name="Z">393.511932</Property> 
    <Property authority="Design" name="Diameter2">0.0</Property> 
    <Property authority="Design" name="AssemblyID">WDLX6B-S11135-Y</Property> 
    <Property authority="Design" name="AssemblyRev">55</Property> 

Ich brauche zur Suche/match „Y“ (Linie No: 2) nur um den Wert zu extrahieren. Ich habe folgende Zeilen geschrieben.

Damit wählt der Code die Zeile Nr. 2 sowie die Zeile Nr. 5, die auch Y in der Zeile hat. Die Ausgabe ist wie folgt:

<Property authority="Design" name="Y">-226.084564</Property> 

    ['-226.084564'] 
    <Property authority="Design" name="AssemblyID">WDLX6B-S11135-Y</Property> 
    [] 

Ich brauche nur Line-Nr. 2 zu picken. Ich habe bereits versucht, Regex zu folgen.

if re.findall(r' \\"Y\\" ',line): 

Aber es ist falsche Syntax. Kann mir jemand vorschlagen, wie man "Y" von Y unterscheidet? Es könnte andere Wege geben, zu vermeiden, dass die Linie Nr. 5 ausgewählt wird. Aber ich muss verallgemeinerten Code für X, Y & Z machen, so dass nur entsprechende Zeilen ausgewählt werden. Vielen Dank.

+1

Verwenden Sie das 'lxml'-Modul, um XML richtig zu analysieren, sonst treten Probleme auf. Regexes werden nicht zum Analysieren von XML verwendet. –

+0

Warum bekomme ich eine negative Bewertung für diese Frage? – makino

+1

, weil es eine schlechte Idee ist, XML mit Regex zu analysieren. Verwenden Sie die richtigen Werkzeuge. Und in jeder anderen Form ist dies wahrscheinlich ein Duplikat einer anderen Frage. –

Antwort

0

Angenommen, Sie möchten folgende Ausgabe: -226,084564 ich eine einfache Regex aufbauen können:

="Y">(-?[0-9-\.]*) 

Diese Regex nur passen für name = "Y". Um es Groß- und Kleinschreibung kann ich ändern, es zu ="[Yy]">(-?[0-9-\.]*)

Output (getestet in Python):

Match 1 
1. -226.084564 
0

folgender regex für mich gearbeitet.

re.findall('\\"Y\\"',line) 

von jetzt an, würde ich xml mit lxml analysieren.

Verwandte Themen