web-dev-qa-db-fra.com

Python chaîne scindée en fonction de l'expression rationnelle

Quel est le meilleur moyen de diviser une chaîne telle que "HELLO there HOW are YOU" en mots majuscules (en Python)?

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


MODIFIER:

J'ai essayé:

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

Cela ne semble pas fonctionner, cependant.

88
user179169

Je suggère

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

Vérifiez cette démo.

103
Ωmega

Vous pouvez utiliser un lookahead:

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

Cela se scinde à chaque espace suivi d'une chaîne de lettres majuscules qui se terminent par une limite de Word.

Notez que les crochets sont uniquement destinés à la lisibilité et pourraient également être omis.

S'il est suffisant que la première lettre d'un mot soit en majuscule (donc si vous souhaitez également vous séparer devant Hello également), cela devient encore plus simple:

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

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

39
Martin Ender

Vous n'avez pas besoin de scission, mais plutôt de trouver:

 re.findall(r'[A-Z]+[^A-Z]*', str)
13
georg

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

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

0
druid62