¿Cómo dividir cadenas según una lista de glosarios?

dormir

Dada una lista de glosarios:

glossaries = ['USA', '34']

El objetivo es usar los elementos dentro de los glosarios y dividir una cadena usando los glosarios como delimitadores. Por ejemplo, dada la cadena y los glosarios, una _isolate_glossaries()función:

glossaries = ['USA', '34']
word = '1934USABUSA'
_isolate_glossaries(word, glossaries)

debería generar:

['19', '34', 'USA', 'B', 'USA']

He intentado:

def isolate_glossary(word, glossary):
    print(word, glossary)
    # Check that word == glossary and glossary not in word
    if re.match('^{}$'.format(glossary), word) or not re.search(glossary, word):
        return [word]
    else:
        segments = re.split(r'({})'.format(glossary), word)
        segments, ending = segments[:-1], segments[-1] # Remove the last catch with null string.
        return segments

def _isolate_glossaries(word, glossaries):
    word_segments = [word]
    for gloss in glossaries:
        word_segments = [out_segment
                         for segment in word_segments 
                         for out_segment in isolate_glossary(segment, gloss)] 
    return word_segments

Funciona, pero parece un poco complicado para tener tantos niveles de divisiones de bucle y expresiones regulares. ¿Existe una mejor manera de dividir la cadena según los glosarios?

revo

Para dividir la cadena por los elementos de la lista, cree una expresión regular sobre la marcha que incluya los elementos separados por una tubería, |todos encerrados en un grupo de captura (un grupo que no captura no incluye elementos en sí mismos en la salida):

list = re.split('({})'.format('|'.join(glossaries)), word);
print ([x for x in list if x]) # filter non-word items

Vea la demostración en vivo aquí

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

¿Cómo puedo dividir una lista de cadenas según la cantidad y el nombre?

Dividir una lista de cadenas según palabras específicas

¿Cómo dividir un marco de datos de cadenas en varias columnas según una lista de índices con pandas?

¿Cómo dividir un marco de datos de cadenas en varias columnas según una lista de índices con pandas?

Cómo dividir una cadena de lista según \ n

Cómo dividir una lista de cadenas de longitud desconocida

Python: ¿cómo dividir una lista de cadenas en dos?

¿Cómo dividir cadenas dentro de una lista?

Kotlin: cómo dividir la lista de cadenas según la longitud total de caracteres

Dividir una lista de objetos según una propiedad c #

¿Cómo dividir cadenas en una lista?

Dividir una lista de cadenas según el valor en Java

¿Cómo dividir una lista de tuplas según el valor mínimo de cada tupla?

¿Cómo dividir una lista de tuplas según el valor mínimo de cada tupla?

Dividir varias cadenas en una lista de objetos en C #

Cómo filtrar valores de columna según una lista de cadenas

¿Cómo dividir una matriz de cadenas?

Dividir y aplanar una lista de cadenas

¿Cómo buscar una lista de cadenas y eliminar todos los caracteres adicionales según una lista de nombres?

Cómo dividir una cadena en dos cadenas según el delimitador en un marco de datos

Cómo dividir una cadena en dos cadenas según el delimitador en un marco de datos

Cómo dividir varios valores de una lista de cadenas a un objeto, golpes si no hay una cadena para dividir

¿Cómo puedo dividir la siguiente cadena de Python a una lista de cadenas?

¿Cómo dividir una lista que contiene un conjunto de cadenas por coma?

¿Cómo dividir una lista que contiene un conjunto de cadenas por coma?

¿Cómo dividir una lista que contiene un conjunto de cadenas por coma?

¿Cómo dividir por palabra una lista de cadenas y convertirla en sublistas?

Cómo dividir una lista de cadenas en sublistas de cadenas por un elemento de cadena específico

Cómo dividir una lista de cadenas en trozos más pequeños de listas de cadenas

TOP Lista

CalienteEtiquetas

Archivo