Regex pour diviser des mots en Python
J'ai été la conception d'une regex pour split tous les mots réels à partir d'une donnée texte:
D'Entrée Exemple:
"John's mom went there, but he wasn't there. So she said: 'Where are you'"
Résultat Attendu:
["John's", "mom", "went", "there", "but", "he", "wasn't", "there", "So", "she", "said", "Where", "are", "you"]
J'ai pensé à une regex comme ça:
"(([^a-zA-Z]+')|('[^a-zA-Z]+))|([^a-zA-Z']+)"
Après la séparation en Python, le résultat contient None
éléments et des espaces vides.
Comment se débarrasser de la Aucun des éléments? Et pourquoi ne pas les espaces match?
Edit:
La séparation d'espaces, donnera des éléments tels que: ["there."]
Et fractionnement sur les non-lettres, donnera des éléments tels que: ["John","s"]
Et fractionnement sur les non-lettres, sauf '
, donnera des éléments tels que: ["'Where","you'"]
source d'informationauteur Betamoo
Vous devez vous connecter pour publier un commentaire.
Au lieu de regex, vous pouvez utiliser des chaînes de caractères-fonctions:
MAISdans votre exemple, vous ne souhaitez pas supprimer l'apostrophe dans
John's
mais que vous souhaitez supprimer dansyou!!'
. Donc, opérations de la chaîne ne parvient pas à ce point et vous avez besoin d'un finement ajusté regex.EDIT: probablement une simple regex peut résoudre votre problème:
Elle permettra de saisir tous les caractères qui commence par une lettre et de garder la capture de tout caractère suivant est une apostrophe ou une lettre.
Cette deuxième expression régulière est une situation très particulière.... Première regex peut capturer des mots comme
you'
. Celui-ci va éviter cela et seulement de capturer apostrophe si c'est dans le mot (pas au début ou à la fin). Mais en ce moment, une situation soulève comme, vous ne pouvez pas capturer l'apostropheMoss' mom
avec la deuxième regex. Vous devez décider si vous allez capturer de fuite de l'apostrophe dans le nom se termine wit s et la définition de la propriété.Exemple:
Mise à JOUR 2: j'ai trouvé un bug dans ma regex! Il ne peut pas capturer unique de lettres, suivie d'une apostrophe comme
A'
. Fixe de la marque new regex est ici:Vous avez trop de capturer les groupes dans votre expression régulière; les rendre non-capture:
Démo:
Qui retourne uniquement un élément qui est vide.
Cette expression n'autorise qu'une seule fin de l'apostrophe, qui peut être suivie par un caractère de plus:
Démo: