2011-05-09 17 views
6

Necesito dividir una cadena en una matriz en los límites de las palabras (espacios en blanco) mientras mantengo el espacio en blanco.Particionar una cadena en Python por una expresión regular

Por ejemplo:

'this is a\nsentence' 

se convertiría en

['this', ' ', 'is', ' ', 'a' '\n', 'sentence'] 

que sé sobre str.partition y re.split, pero ninguno de ellos bastante hacer lo que quiera y no hay re.partition.

¿Cómo debo particionar cadenas en espacios en blanco en Python con una eficiencia razonable?

Respuesta

11

Prueba esto:

s = "this is a\nsentence" 
re.split(r'(\W+)', s) # Notice parentheses and a plus sign. 

El resultado sería:

['this', ' ', 'is', ' ', 'a', '\n', 'sentence'] 
+1

Gracias. Debería haber leído los documentos 're.split' con más cuidado. –

3

Prueba esto:

re.split('(\W+)','this is a\nsentence') 
4

Símbolo de espacio en blanco en el RE es '\ s' no ' \ W '

Compare:

import re 


s = "With a sign # written @ the beginning , that's a\nsentence,"\ 
    '\nno more an instruction!,\tyou know ?? "Cases" & and surprises:'\ 
    "that will 'lways unknown **before**, in 81% of time$" 


a = re.split('(\W+)', s) 
print a 
print len(a) 
print 

b = re.split('(\s+)', s) 
print b 
print len(b) 

produce

['With', ' ', 'a', ' ', 'sign', ' # ', 'written', ' @ ', 'the', ' ', 'beginning', ' , ', 'that', "'", 's', ' ', 'a', '\n', 'sentence', ',\n', 'no', ' ', 'more', ' ', 'an', ' ', 'instruction', '!,\t', 'you', ' ', 'know', ' ?? "', 'Cases', '" & ', 'and', ' ', 'surprises', ':', 'that', ' ', 'will', " '", 'lways', ' ', 'unknown', ' **', 'before', '**, ', 'in', ' ', '81', '% ', 'of', ' ', 'time', '$', ''] 
57 

['With', ' ', 'a', ' ', 'sign', ' ', '#', ' ', 'written', ' ', '@', ' ', 'the', ' ', 'beginning', ' ', ',', ' ', "that's", ' ', 'a', '\n', 'sentence,', '\n', 'no', ' ', 'more', ' ', 'an', ' ', 'instruction!,', '\t', 'you', ' ', 'know', ' ', '??', ' ', '"Cases"', ' ', '&', ' ', 'and', ' ', 'surprises:that', ' ', 'will', ' ', "'lways", ' ', 'unknown', ' ', '**before**,', ' ', 'in', ' ', '81%', ' ', 'of', ' ', 'time$'] 
61 
Cuestiones relacionadas