Quelle est la meilleure façon de diviser une chaîne "HELLO there HOW are YOU"
par des mots en majuscules (en Python)?
Donc, je finirais avec un tableau comme celui-ci: results = ['HELLO there', 'HOW are', 'YOU']
ÉDITER:
J'ai essayé:
p = re.compile("\b[A-Z]{2,}\b")
print p.split(page_text)
Cela ne semble pas fonctionner, cependant.
re.split()
?Réponses:
je suggère
Regardez cette démo .
la source
re.split(re.split(pattern, string, maxsplit=0, flags=0))
comme mentionné dans les documents précédemment cités.Vous pouvez utiliser une anticipation:
Cela sera divisé à chaque espace suivi d'une chaîne de lettres majuscules qui se terminent par une limite de mot.
Notez que les crochets sont uniquement destinés à la lisibilité et pourraient également être omis.
S'il suffit que la première lettre d'un mot soit en majuscules (donc si vous souhaitez également séparer devant
Hello
), cela devient encore plus facile:Maintenant, cela se divise à chaque espace suivi de toute lettre majuscule.
la source
re.split(r'[ ](?=[A-Z]+\b)', input)
pour qu'il ne trouve pas de lettres majuscules? Par exemple, cela ne correspondrait pas à "A"? J'ai essayére.split(r'[ ](?=[A-Z]{2,}+\b)', input)
. Merci!I
?re.split(r'[ ](?=[A-Z]{2,}\b)', input)
devrait le faire.[ ]+
ou peut-être même\W+
d'attraper un peu plus de cas. Pourtant, une bonne réponse.[ ]
ne fonctionnait pas pour moi. Au lieu de cela, j'ai utilisé\s
. L'expressionre.split("\s(?=[A-Z]+\s)", string)
Votre question contient la chaîne littérale
"\b[A-Z]{2,}\b"
, mais cela\b
signifiera un retour arrière, car il n'y a pas de modificateur r.Essayez:
r"\b[A-Z]{2,}\b"
.la source