se puede usarsplit con mas de un separador

Oswaldo Hernández listas en soft-com.es
Vie Dic 15 13:24:22 CET 2006


Pepe Aracil escribió:
> 
> Oswaldo Hernández escribió:
>> joana salgado gomez escribió:
>>>   hola chicos:
>>>
>>>   tengo la siguiente cadena
>>>
>>>   instrucciones='tres litros de leche forma de preparacion: echar una
>>>   taza de agua y luego remover. . .'
>>>
>>>   lo que quiero es separar la cadena en dos y para este caso en concreto
>>>   es facil ya que se puede hacer
>>>   instrucciones.split('forma de preparacion')
>>>
>>>   pero el problema es que en vez de forma de preparacion puede aparecer,
>>>   metodo o prparacion o como se elabora. se prodira hacer un split con
>>>   cuatro separadores lo he probado con or-s y no se puede
>>>
>>>   alguien sabe como hacerlo??
>> En un caso parecido lo que hago yo es unificarlos. Mas o menos asi:
>>
>> separadores = ('forma', 'metodo', 'elaboracion')
>> for s in separadores:
>>     instrucciones.replace(s, '@@')
>> separadores.split('@@')
>>
>> Desconozco si hay otra forma mas directa.
>>
>>
> 
> La instrucción "separadores.split('@@')" debería ser "instrucciones.split('@@')"
> 

Si es cierto, lo hice de memoria sin fijarme demasiado, solo para dar una idea. Tambien la linea del 
replace esta mal, no esta asignando la cadena modificada.

Mi caso real es analizar los datos de fechas, que pueden entrar utilizando puntos, barras, guiones o 
espacios como separadores:

 >>> fecharara = "15.12-2006"
 >>> for s in ('.', '-', ' '):
...     fecharara = fecharara.replace(s, '/') # unificar a barra
 >>> fecharara.split('/')
['15', '12', '2006']



> Con listas comprensivas seria algo como esto.
> 
> body="A::B"
> separators=["@@","::"]
> [body.split(s) for s in separators if s in body]
> 
> 
> Esto nos devuelve una lista de listas, útil si existe la posibilidad de encontrar
> más de un separador en el texto.
> 

Con este metodo, devuelve una lista con listas distintas para cada separador:

 >>> body = "A::B@@C"
 >>> separators=["@@","::"]
 >>> [body.split(s) for s in separators if s in body]
[['A::B', 'C'], ['A', 'B@@C']]

No se si el metodo es válido para el caso que se preguntaba.

Saludos,
-- 
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************




Más información sobre la lista de distribución Python-es