2013-04-11 15 views
6

Ich habe Probleme, meinen Kopf um reguläre Python-Ausdrücke zu wickeln, um einen regulären Ausdruck zum Extrahieren bestimmter Werte zu erhalten.Extrahieren von Daten mit regulären Python-Ausdrücken

Die Seite, die ich zu analysieren, ich versuche, hat eine Reihe von productIds, die in folgendem Format erscheinen

\"productId\":\"111111\" 

ich alle Werte extrahieren müssen, 111111 in diesem Fall.

+0

Haben Sie die [Dokumentation zu Python regulären Ausdrücken] lesen (http://docs.python.org/2/library/re.html)? –

+1

Sind Sie neu bei Regex, Python oder beidem? Welchen Teil brauchst du Hilfe? Was hast du probiert? – cmd

+1

Mögliches Duplikat von [Wie extrahiere ich einen Teilstring aus einem String in Python?] (Http://stackoverflow.com/questions/4666973/how-to-extract-a-substring-from-inside-a-string-in) -python) –

Antwort

15
t = "\"productId\":\"111111\"" 
m = re.match("\W*productId[^:]*:\D*(\d+)", t) 
if m: 
    print m.group(1) 

bedeutet Nicht-Wort-Zeichen (\W*), dann productId von Nicht-Spalte Zeichen folgen ([^:]*) und einem :. Passen Sie dann die Nicht-Ziffern (\D*) an und erfassen und erfassen Sie die folgenden Ziffern ((\d+)).

Ausgabe

111111 
0

die Sie interessieren,

:\\"(\d*)\\" 

weitere Beispiele Ihrer Daten geben, wenn dies nicht tun, was Sie wollen.

7

etwas wie folgt aus:

In [13]: s=r'\"productId\":\"111111\"' 

In [14]: print s 
\"productId\":\"111111\" 

In [15]: import re 

In [16]: re.findall(r'\d+', s) 
Out[16]: ['111111'] 
+0

Ich finde das mehr Pythonic. :) – skytreader

0

Die Schrägstriche hier könnte die Verwirrung, weil sie als Escape-Zeichen verwendet werden sowohl von (nicht roh) Python-Strings und durch die regexp-Syntax.

Das extrahiert den Produkt-IDs aus dem Format, das Sie geschrieben: mit einem Pegel von Backslash

re_prodId = re.compile(r'\\"productId\\":\\"([^"]+)\\"') 

Der rohe String r'...' tut weg; Durch die Verwendung eines einfachen Anführungszeichens als Zeichenfolgebegrenzer entfällt die Notwendigkeit, doppelte Anführungszeichen zu umgehen. und schließlich werden die Backslashes wegen ihrer besonderen Bedeutung in der Regexp-Sprache (nur einmal) verdoppelt.

können Sie das findall() Methode regexp Objekts verwenden, um alle Spiele in einem Text zu finden:

re_prodId.findall(text_to_search) 

Dies wird eine Liste aller Produkt-IDs zurück.