2013-04-11 16 views
6

Sto riscontrando qualche problema nel disegnare le espressioni regolari di Python per ottenere un'espressione regolare per estrarre valori specifici.Estrazione di dati con le espressioni regolari Python

La pagina che sto cercando di analizzare ha un certo numero di productIds che appaiono nel seguente formato

\"productId\":\"111111\" 

ho bisogno di estrarre tutti i valori, 111111 in questo caso.

+0

Hai letto il [documentazione su Python espressioni regolari] (http://docs.python.org/2/library/re.html)? –

+1

È che sei nuovo di regex, python o entrambi? Con quale parte hai bisogno di aiuto? Che cosa hai provato? – cmd

+1

Possibile duplicato di [come estrarre una sottostringa da una stringa in Python?] (Http://stackoverflow.com/questions/4666973/how-to-extract-a-substring-from-inside-a-string-in -python) –

risposta

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

caratteri non-parola che significa partita (\W*), poi productId seguiti da caratteri non-colonna ([^:]*) e un :. Quindi abbina le cifre non digitate (\D*) e confronta e cattura le seguenti cifre ((\d+)).

uscita

111111 
0

Prova questo,

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

dare più esempi di dati se questo non fa quello che si vuole.

7

qualcosa di simile:

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

Lo trovo più Pythonic. :) – skytreader

0

I backslash qui potrebbe aumentare la confusione, perché sono utilizzati come carattere di escape sia da stringhe (non prima) Python e dalla sintassi regexp.

Questo estrae gli ID prodotto dal formato che hai postato:

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

La stringa grezzo r'...' elimina un livello di backslash fuga; l'uso di una virgoletta singola in quanto il delimitatore di stringhe elimina la necessità di evitare le virgolette doppie; e infine le backslashe sono raddoppiate (solo una volta) a causa del loro significato speciale nel linguaggio regexp.

È possibile utilizzare il metodo dell'oggetto regexp findall() per trovare tutte le partite in un testo:

re_prodId.findall(text_to_search) 

Ciò restituirà un elenco di tutti gli ID di prodotto.

Problemi correlati