una separar recortar palabras palabra letras leer imprimir contar comparar caracteres cadenas cadena python string split delimiter

separar - Python: cadena dividida con mĂșltiples delimitadores



recortar una cadena python (5)

Esta pregunta ya tiene una respuesta aquí:

Encontré algunas respuestas en línea, 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, debe ser un punto y coma o una coma seguida de un espacio. Las comas individuales sin espacios finales se deben dejar intactas.

Cadena de ejemplo:

"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]'')


Aquí hay una forma segura para cualquier iterable de delimitadores, usando expresiones regulares:

>>> import re >>> delimiters = "a", "...", "(c)" >>> example = " (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?"]

re.escape permite construir el patrón automáticamente y hacer que los delimitadores se escapen bien.

Aquí está esta solución como una función para su placer de copiar y pegar:

def split(delimiters, string, maxsplit=0): import re regexPattern = ''|''.join(map(re.escape, delimiters)) return re.split(regexPattern, string, maxsplit)

Si va a dividirse con frecuencia utilizando los mismos delimitadores, compile de antemano su expresión regular como se describe y use RegexObject.split .


Así es como se ve la expresión regular:

import re # "semicolon or (a comma followed by a space)" pattern = re.compile(r";|, ") # "(semicolon or a comma) followed by a space" pattern = re.compile(r"[;,] ") print pattern.split(text)


En respuesta a la respuesta anterior de Jonathan, esto solo 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'']

Al poner los delimitadores entre corchetes, parece funcionar mejor.

>>> re.split(''[- :]'', b) [''1999'', ''05'', ''03'', ''10'', ''37'', ''00'']


Haz un str.replace(''; '', '', '') y luego un str.split('', '')


Por suerte, Python tiene este incorporado :)

import re re.split(''; |, '',str)

Actualizar:
Siguiendo tu comentario:

>>> a=''Beautiful, is; better*than/nugly'' >>> import re >>> re.split(''; |, |/*|/n'',a) [''Beautiful'', ''is'', ''better'', ''than'', ''ugly'']