2013-04-11 16 views
6

Mam problemy z zawijaniem głowy wokół wyrażeń regularnych w języku Python, aby wymyślić wyrażenie regularne, aby wyodrębnić określone wartości.Wyodrębnianie danych za pomocą wyrażeń regularnych w języku Python

Strona Próbuję analizować posiada szereg productIds który pojawi się w następującym formacie

\"productId\":\"111111\" 

muszę wydobyć wszystkie wartości, 111111 w tym przypadku.

+0

Czy czytasz [dokumentację o wyrażeniach regularnych python] (http://docs.python.org/2/library/re.html)? –

+1

Jest to, że jesteś nowy do regex, python lub obu? Z której części potrzebujesz pomocy? Co próbujesz? – cmd

+1

Możliwy duplikat [jak wyodrębnić podciąg z łańcucha znaków w Pythonie?] (Http://stackoverflow.com/questions/4666973/how-to-extract-a-substring- from-inside-a-string-in -python) –

Odpowiedz

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

oznacza mecz innych znaków (słowo \W*), a następnie productId następnie znaków spoza kolumny ([^:]*) i :. Następnie dopasuj liczby bez cyfr (\D*) i dopasuj i przechwytuj następujące cyfry ((\d+)).

Wyjście

111111 
0

Spróbuj tego,

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

dać więcej przykładów swoich danych, jeśli to nie to, co chcesz.

7

coś takiego:

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

Uważam, że jest to bardziej Pythoniczne. :) – skytreader

0

Tutejsze backslashe może dodać do zamieszania, ponieważ są one używane jako znak ucieczki zarówno przez strun (nie-raw) Python i przez składni wyrażeń regularnych.

ten wydobywa identyfikatory produktów z jednego formatu na drugi Wysłany:

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

Surowa ciąg r'...' znosi jednego poziomu backslash ucieczki; użycie pojedynczego cudzysłowu jako ogranicznika łańcucha eliminuje potrzebę unikania podwójnych cudzysłowów; i wreszcie backslashe są podwojone (tylko raz) z powodu ich specjalnego znaczenia w języku regexp.

Można użyć findall() metodę obiektu RegExp, aby znaleźć wszystkie mecze w jakimś tekstem:

re_prodId.findall(text_to_search) 

ta zwróci listę wszystkich identyfikatorów produktów.

Powiązane problemy