2 votes

séparation des mots fusionnés en python

Je travaille avec un texte où tous les " \n "s ont été supprimés (ce qui fusionne deux mots en un seul, comme "J'aime les bananesEt voici une nouvelle ligne.Et une autre.") Ce que je voudrais faire maintenant, c'est dire à Python de rechercher les combinaisons d'une minuscule suivie d'une majuscule/ponctuation suivie d'une majuscule et d'insérer un espace.

Je pensais que ce serait facile avec les expressions de registre, mais ce n'est pas le cas - je n'ai pas pu trouver de fonction "insérer" ou quoi que ce soit, et les commandes de chaîne ne semblent pas être utiles non plus. Comment dois-je m'y prendre ? Toute aide serait grandement appréciée, je suis désespéré ici...

Merci, Patrick

4voto

Andrew Clark Points 77748

Essayez ce qui suit :

re.sub(r"([a-z\.!?])([A-Z])", r"\1 \2", your_string)

Par exemple :

import re
lines = "I like bananasAnd this is a new line.And another one."
print re.sub(r"([a-z\.!?])([A-Z])", r"\1 \2", lines)
# I like bananas And this is a new line. And another one.

Si vous voulez insérer une nouvelle ligne au lieu d'un espace, changez le remplacement en r"\1\n\2" .

1voto

Brandon Rhodes Points 21188

Utilisation de re.sub vous devriez être en mesure de créer un modèle qui prend une lettre minuscule et une lettre majuscule et les remplace par les deux mêmes lettres, mais avec un espace entre les deux :

import re
re.sub(r'([a-z][.?]?)([A-Z])', '\\1\n\\2', mystring)

0voto

Gabe Points 49718

Vous cherchez le sub fonction. Voir http://docs.python.org/library/re.html pour la documentation.

0voto

Cameron Points 32208

Hmm, intéressant. Vous pouvez utiliser des expressions régulières pour remplacer le texte avec la balise sub() fonction :

>>> import re
>>> string = 'fooBar'
>>> re.sub(r'([a-z][.!?]*)([A-Z])', r'\1 \2', string)
'foo Bar'

0voto

easel Points 2466

Si vous n'avez vraiment pas de majuscules, sauf au début d'une phrase, il sera probablement plus facile de simplement boucler la chaîne.

>>> import string
>>> s = "a word endsA new sentence"
>>> lastend = 0
>>> sentences = list()
>>> for i in range(0, len(s)):
...    if s[i] in string.uppercase:
...        sentences.append(s[lastend:i])
...        lastend = i
>>> sentences.append(s[lastend:])
>>> print sentences
['a word ends', 'A new sentence']

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X