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?
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
Déjame decir algunas palabras