2010-12-29 13 views
10

Ho una stringa come "GoTo: 7018 6453 12654\n" voglio solo ottenere il numero di qualcosa di simile ['7018', '6453', '12654'], mi cerca espressione regolare ma non posso dividere stringa per ottenere solo il numero qui è il mio codice:Dividere la stringa e ottenere semplicemente il numero in python?

Esempio 1:

splitter = re.compile(r'\D'); 
match1 = splitter.split("GoTo: 7018 6453 12654\n") 

my output is: ['', '', '', '', '', '', '', '', '7018', '6453', '12654', ''] 

Esempio 2:

splitter = re.compile(r'\W'); 
match1 = splitter.split("GoTo: 7018 6453 12654\n") 

my output is: ['GoTo', '', '7018', '6453', '12654', ''] 

risposta

13

Se tutti i numeri sono numeri interi positivi, si può fare senza le espressioni regolari utilizzando il metodo isdigit():

>>> text = "GoTo: 7018 6453 12654\n" 
>>> [token for token in text.split() if token.isdigit()] 
['7018', '6453', '12654'] 
+2

+1 per i non-re. Si potrebbe facilmente lanciare 'int (item)' anche lì, se fosse necessario in seguito. – plundra

+0

Ha un po 'di tempo ... Se split + isdigit è il valore di base (è il più veloce), re.findall è 1.5 volte più lento e non compilato re.findall 2.5. – plundra

+0

Funziona solo se il separatore è puro spazio (ad esempio anche "1, 2, 3" lo interromperà) – 6502

3
>>> import re 
>>> re.findall("[0-9]+", "GoTo: 7018 6453 12654\n") 
['7018', '6453', '12654'] 
>>> 
6
>>> re.findall(r'\d+', 'GoTo: 7018 6453 12654\n') 
['7018', '6453', '12654'] 
2

È possibile seguire il metodo attuale campione 1 insieme con questo codice:

filter (lambda a: a != '', match1) 
1

Prova questa:

import re 
splitter = re.compile(r'\d+') 
match1 = splitter.findall("GoTo: 7018 6453 12654\n") 
print match1 
Problemi correlati