Python scinde une chaîne basée sur les regex
Quelle est la meilleure façon de découper une chaîne de caractères comme "HELLO there HOW are YOU"
en majuscules les mots (en Python)?
Donc je finirais avec un tableau comme tel: results = ['HELLO there', 'HOW are', 'YOU']
EDIT:
J'ai essayé:
p = re.compile("\b[A-Z]{2,}\b")
print p.split(page_text)
Il ne semble pas fonctionner, cependant.
- Qu'avez-vous essayé? - Vous ne pouvez pas trouver
re.split()
? - Quand vous dites quelque chose ne fonctionne pas, vous devrez expliquer pourquoi. Ne vous obtenez une exception? (Si oui, poste l'ensemble de l'exception) avez-vous reçu le bon de sortie?
Vous devez vous connecter pour publier un commentaire.
Je suggère
Vérifier cette démo.
re.split(re.split(pattern, string, maxsplit=0, flags=0))
comme mentionné précédemment dans le cité docs.Vous pouvez utiliser un lookahead:
Ce sera divisée à chaque espace est suivi par une chaîne de lettres majuscules, qui aboutissent à une limite de mot.
Noter que les crochets ne sont que pour des raisons de lisibilité et pourrait ainsi être omis.
Si il est suffisant que la première lettre d'un mot est en majuscules (donc, si vous voulez diviser en face de
Hello
ainsi), il est encore plus facile:Maintenant, cela se divise à chaque espace suivi par une lettre majuscule.
re.split(r'[ ](?=[A-Z]+\b)', input)
en sorte qu'elle ne trouve pas les majuscules? E. g. Il ne serait pas correspondre à "Un"? 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+
pour attraper un peu plus de cas. Encore une bonne réponse.Vous n'avez pas besoin de rupture, mais plutôt findall:
someThing
entresome
etThing
\b
's" n'est vrai que pour un certain sous-ensemble de) langue anglaise. Le langage naturel tokenisation est un problème complexe et ne peut pas être résolu avec des expressions régulières seul. Sauf si vous venez avec une expression qui est en mesure de correspondre à la "co-coalgebra", "O'Hara" ou "N/A" d'une façon non ambiguë, je refuse de discuter de toute question concernant les "mots".Votre question contient la chaîne de caractères littérale
"\b[A-Z]{2,}\b"
,mais que
\b
signifie revenir en arrière, car il n'y a pas de r-modificateur.Essayer:
r"\b[A-Z]{2,}\b"
.