2011-10-23 32 views
54

Este código hace lo que casi lo necesito a ..Python split() sin quitar el delimitador

for line in all_lines: 
    s = line.split('>') 

Excepto que elimina todos los '>' delimitadores.

Así,

<html><head> 

convierte en

['<html','<head'] 

¿Hay una manera de utilizar el método(), pero dividida mantener el delimitador, en vez de eliminarla?

Con estos resultados ..

['<html>','<head>'] 
+17

Esto en realidad no soluciona su problema, pero si usted está tratando de analizar HTML en Python, le recomiendo [Hermosa sopa] (http://www.crummy.com/software/BeautifulSoup/). –

+2

Ver también [En Python, ¿cómo divido una cadena y guardo los separadores?] (Http://stackoverflow.com/questions/2136556/in-python-how-do-i-split-a-string-and- keep-the-separators). – outis

Respuesta

32
d = ">" 
for line in all_lines: 
    s = [e+d for e in line.split(d) if e] 
+3

Eso funciona perfectamente ... pero no entiendo completamente lo que está pasando. – some1

+2

@ some1 básicamente itera sobre los resultados de la división y agrega el delimitador de nuevo. "S es una lista, donde cada elemento de esa lista es e + d, donde e son los elementos en el resultado de line.split (d), pero solo si e no está vacío " – JHixson

+7

Esto agrega un delimitador a todos los elementos de la lista resultante, incluida una lista de elementos únicos sin delimitador ... ¿Qué sucede si _ solo_ desea que el delimitador se anexe al primero de la división? ¿elementos? –

1

Sólo se separaron, entonces para cada elemento de la matriz/lista (aparte de la última) añadir un arrastre ">" a la misma.

+0

¿Qué pasa con el caso de ">>" simplemente se convertiría en ">" – paulm

10

¿Qué tal esto:

import re 
s = '<html><head>' 
re.findall('[^>]+>', s) 
23

Si está analizando HTML con divisiones, lo más probable es hacerlo mal, excepto si está escribiendo un guión de una sola ronda dirigida a un fijo y seguro archivo de contenido. Si se supone que funciona en cualquier entrada HTML, ¿cómo manejará algo como <a title='growth > 8%' href='#something'>?

De todos modos, las siguientes obras para mí:

>>> import re 
>>> re.split('(<[^>]*>)', '<body><table><tr><td>')[1::2] 
['<body>', '<table>', '<tr>', '<td>'] 
Cuestiones relacionadas