2010-12-29 31 views
10

tengo una cadena como "GoTo: 7018 6453 12654\n" sólo quiero obtener el número de algo como esto ['7018', '6453', '12654'], que trata de expresiones regulares, pero no puedo dividir la cadena para obtener sólo número aquí es mi código:¿Separar cadena y obtener el número en python?

Muestra 1:

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

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

Muestra 2:

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

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

Respuesta

13

Si todos los números son números enteros positivos, se puede hacer eso sin expresiones regulares utilizando el método isdigit():

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

+1 para no volver. También podría arrojar 'int (item)' allí, si fuera necesario más tarde. – plundra

+0

Hice algunos 'timeit' ... Si split + isdigit es el valor base (es el más rápido), compilado re.findall es 1.5 veces más lento y uncompplicado re.findall 2.5. – plundra

+0

Esto funciona solo si el separador es un espacio en blanco puro (por ejemplo, incluso "1, 2, 3" lo rompería) – 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

Puede seguir su método actual en la muestra 1, junto con este código:

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

Prueba esto:

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