150 votes

Séparation d'une chaîne de caractères basée sur une expression rationnelle

Quelle est la meilleure façon de diviser une chaîne de caractères telle que "HELLO there HOW are YOU" par des mots en majuscules (en Python) ?

Je me retrouverais donc avec un tableau comme celui-ci : results = ['HELLO there', 'HOW are', 'YOU']


EDITAR:

J'ai essayé :

p = re.compile("\b[A-Z]{2,}\b")
print p.split(page_text)

Mais ça n'a pas l'air de marcher.

170voto

Ωmega Points 17702

Je propose

l = re.compile("(?<!^)\s+(?=[A-Z])(?!.\s)").split(s)

Vérifiez cette démo .

70voto

Martin Büttner Points 26511

Tu pourrais utiliser un lookahead :

re.split(r'[ ](?=[A-Z]+\b)', input)

Cette opération sera interrompue à chaque espace suivi d'une chaîne de lettres majuscules se terminant par une limite de mot.

Notez que les crochets ne servent qu'à faciliter la lecture et pourraient tout aussi bien être omis.

S'il suffit que la première lettre d'un mot soit en majuscule (donc si vous voulez diviser devant Hello aussi), c'est encore plus facile :

re.split(r'[ ](?=[A-Z])', input)

Maintenant, cela se divise à chaque espace suivi d'une lettre majuscule.

1voto

druid62 Points 87

Votre question contient la chaîne littérale "\b[A-Z]{2,}\b" , mais que \b signifiera retour en arrière, car il n'y a pas de modificateur r.

Essayez : r"\b[A-Z]{2,}\b" .

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