¿Cómo borrar las palabras entre dos delimitadores?

Tengo un dato ruidoso … algo como

something something  

Ahora solo quiero extraer "something something" . ¿Hay alguna manera de cómo eliminar el texto entre esos dos delimitadores "<" y ">" ?

Usa expresiones regulares :

 >>> import re >>> s = '<@ """@$ FSDF >something something ' >>> re.sub('<[^>]+>', '', s) 'something something ' 

[Actualizar]

Si probó un patrón como <.+> , Donde el punto significa cualquier carácter y el signo más significa uno o más, sabe que no funciona.

 >>> re.sub(r'<.+>', s, '') '' 

¡¿¡Por qué!?! Ocurre porque las expresiones regulares son “codiciosas” por defecto. La expresión coincidirá con cualquier cosa hasta el final de la cadena, incluida la > , y esto no es lo que queremos. Queremos hacer coincidir < y detener en el siguiente > , así que usamos el patrón [^x] que significa "cualquier carácter menos x" (siendo x > ).

El ? El operador convierte el partido en "no codicioso", por lo que tiene el mismo efecto:

 >>> re.sub(r'<.+?>', '', s) 'something something ' 

Lo anterior es más explícito, este es menos tipográfico; ten en cuenta que x? significa cero o una aparición de x.

Por supuesto, puedes usar expresiones regulares.

 import re s = #your string here t = re.sub('<.*?>', '', s) 

El código anterior debería hacerlo.

Primero gracias Paulo Scardine, utilicé su trabajo para hacer una gran cosa. La idea era tener una etiqueta libre de LibreOffice po para imprimir. E hice el siguiente script que limpiará el archivo de ayuda para los más pequeños y más fáciles.

 import re f = open('a.csv') text = f.read() f.close() clean = re.sub('<[^>]+>', ' ', text) f = open('b.csv', 'w') f.write(clean) f.close() 
 import re my_str = '<@ """@$ FSDF >something something ' re.sub('<.*?>', '', my_str) 'something something ' 

La función re.sub toma una expresión regular y reemplaza todas las coincidencias en la cadena con el segundo parámetro. En este caso, estamos buscando todos los caracteres entre < y > ( '<.*?>' ) Y reemplazándolos con nada ( '' ).

El ? Se utiliza en re para búsquedas no codiciosas.

Más sobre el módulo de re .


Si esos "ruidos" son realmente tags html, te sugiero que busques en BeautifulSoup

Solo por interés, podrías escribir algún código como:

 with open('blah.txt','w') as f: f.write("""oneasfd twothree""") def filter_line(line): count=0 ignore=False result=[] for c in line: if c==">" and count==1: count=0 ignore=False if not ignore: result.append(c) if c=="<" and count==0: ignore=True count=1 return "".join(result) with open('blah.txt') as f: print "".join(map(filter_line,f.readlines())) >>> <>one<>asfd<> <>two<><>three<>