He encontrado algunas respuestas en Internet, pero no tengo experiencia con expresiones regulares, que creo que es lo que se necesita aquí.
Tengo una cadena que necesita ser dividida por un ';' o ', ' Es decir, tiene que ser un punto y coma o una coma seguida de un espacio. Las comas individuales sin espacios finales deben dejarse sin tocar
Ejemplo de cadena:
"b-staged divinylsiloxane-bis-benzocyclobutene [124221-30-3], mesitylene [000108-67-8]; polymerized 1,2-dihydro-2,2,4- trimethyl quinoline [026780-96-1]"
debe dividirse en una lista que contenga lo siguiente
('b-staged divinylsiloxane-bis-benzocyclobutene [124221-30-3]' , 'mesitylene [000108-67-8]', 'polymerized 1,2-dihydro-2,2,4- trimethyl quinoline [026780-96-1]')
Por suerte, Python lo tiene incorporado :)
import re
re.split('; |, ',str)
Actualización:
Siguiendo tu comentario:
>>> a='Beautiful, is; better*than\nugly'
>>> import re
>>> re.split('; |, |\*|\n',a)
['Beautiful', 'is', 'better', 'than', 'ugly']
Aquí's una forma segura para cualquier iterable de delimitadores, usando expresiones regulares:
>>> import re
>>> delimiters = "a", "...", "(c)"
>>> example = "stackoverflow (c) is awesome... isn't it?"
>>> regexPattern = '|'.join(map(re.escape, delimiters))
>>> regexPattern
'a|\\.\\.\\.|\\(c\\)'
>>> re.split(regexPattern, example)
['st', 'ckoverflow ', ' is ', 'wesome', " isn't it?"]
permite construir el patrón automáticamente y hacer que los delimitadores se escapen bien.
Aquí's esta solución como una función para su placer de copiar-pegar:
def split(delimiters, string, maxsplit=0):
import re
regexPattern = '|'.join(map(re.escape, delimiters))
return re.split(regexPattern, string, maxsplit)
Si usted'va a dividir a menudo usando los mismos delimitadores, compile su expresión regular de antemano como se describe y use [RegexObject.split
][split].
[escape]: http://docs.python.org/2/library/re.html#re.escape [split]: http://docs.python.org/2/library/re.html#re.RegexObject.split
En respuesta a la respuesta de Jonathan arriba, esto sólo parece funcionar para ciertos delimitadores. Por ejemplo:
>>> a='Beautiful, is; better*than\nugly'
>>> import re
>>> re.split('; |, |\*|\n',a)
['Beautiful', 'is', 'better', 'than', 'ugly']
>>> b='1999-05-03 10:37:00'
>>> re.split('- :', b)
['1999-05-03 10:37:00']
Poniendo los delimitadores entre corchetes parece funcionar más eficazmente.
>>> re.split('[- :]', b)
['1999', '05', '03', '10', '37', '00']