Je travaille donc sur un problème d'analyse de texte et j'essaie d'éliminer tous les chiffres compris entre 0 et 999 avec une expression régulière en Python. J'ai essayé le générateur de plage numérique de Regex pour obtenir l'expression régulière mais je n'ai pas eu la chance. Je ne peux que supprimer tous les chiffres.
J'ai essayé plusieurs regex mais cela n'a pas fonctionné. Voici ce que j'ai essayé p> J'ai essayé aussi: p> Celui-ci: p> def clean_data(data_to_clean):
# Remove numbers starting from 0 ==> 999
data_to_clean = re.sub('[^[0-9]{1,3}$]', ' ', data_to_clean)
return data_to_clean
3 Réponses :
Je pense que vous pouvez utiliser une combinaison de votre essai avec les limites de mots ( Donc, la regex résultante devrait ressembler à: Si vous vérifiez la démo: Regex101.com/r/qdrobh/6
Il devrait remplacer tous les nombres à 1 chiffre, à 2 chiffres et à 3 chiffres et ignorer des nombres plus élevés et d'autres mots. P> \ b code>) et votre dernier essai (
[0-9] {1,3} code>) . p>
\ b [0-9] {1,3} \ b code> p>
Il n'enlève pas les chiffres même avec ces expressions régulières.
Vous êtes les bienvenus, mais n'oubliez pas de marquer la bonne réponse et / ou de voter pour des commentaires utiles. La réponse de @krisz me semble très bonne et considère même si les zéros de premier plan sont là. Mais il ne supprimera pas 000 par exemple
Ok @gaw. Merci pour votre aide
Les nombres de 0 à 999 sont
Ceci donne une regex naïve de cela fonctionne en utilisant un lookahead négatif < Code> (?! \ B0 [0-9]) CODE> Pour vérifier le début d'un mot suivi d'un fichier 0 suivi d'un chiffre pour ignorer 01, et puis cherche 1 à trois caractères de 0 à 9 0 à 9. Parce que le lookahead négatif a besoin d'au moins 2 caractères, un seul / \ b (?: [0-9] | [1-9] [0-9] | [1-9] [0-9] [ 0-9]]) \ b / code> Cependant, nous avons des classes de caractères dupliquées dans les options afin que nous puissions les extraire p>
0 code> passe toujours comme valide. P> p>
il n'enlève pas les chiffres même avec ces expressions régulières
Vous devez précéder la chaîne de motif avec un r code> pour éviter de s'échapper de sorte que l'interpeter ne swaps pas
\ b code> avec un arrière-plan. De plus, vous pouvez simplifier le motif comme celui-ci:
data_to_clean = re.sub(r'\b([0-9]|[1-9][0-9]{1,2})\b', ' ', data_to_clean)
Bienvenue. S'il vous plaît n'oubliez pas de uplifier et d'accepter la réponse!
Je ne sais pas si nécessaire, mais les chiffres avec zéro dirigeant ne sont pas inclus (par exemple. 000, 001, ...) Je pense que c'était intentionnel, mais il vaut la peine de mentionner
J'ai supposé que les zéros principaux ne devraient pas être inclus car l'OP a essayé d'utiliser un générateur de plage numérique de regex
J'aime bien votre réponse, puis Jgni est depuis un lookahead très cher et non nécessaire ici. Il montre également ses besoins de réponse> 400 étapes comparativement à environ 200 étapes de votre réponse.
Cette combinaison de vos essais ne devrait-il pas fonctionner:
\ b [0-9] {1,3} \ b code>? Si vous cochez: REGEX101.COM/R/QDROBH/6 Cela devrait fonctionner
Pourriez-vous poster un exemple de texte, où les chiffres doivent être remplacés?
** Bonjour la Commande 2000501784 Est Validée et Verses autant Je ne SEUX LA RÉRESTER POSTE 30 MERCI D AVANCE ** Je reçois le même résultat
Je devrais supprimer 30