0
votes

Gammes numériques avec une expression régulière python

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> xxx pré>

J'ai essayé aussi: p> xxx pré>

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


4 commentaires

Cette combinaison de vos essais ne devrait-il pas fonctionner: \ b [0-9] {1,3} \ b ? 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


3 Réponses :


0
votes

Je pense que vous pouvez utiliser une combinaison de votre essai avec les limites de mots ( \ b ) et votre dernier essai ( [0-9] {1,3} ) .

Donc, la regex résultante devrait ressembler à: \ b [0-9] {1,3} \ b

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.


3 commentaires

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



0
votes

Les nombres de 0 à 999 sont

  1. Un seul caractère [0-9]
  2. Deux caractères [1-9] [0-9]
  3. trois caractères [1-9] [0-9] [0-9]

    Ceci donne une regex naïve de / \ b (?: [0-9] | [1-9] [0-9] | [1-9] [0-9] [ 0-9]]) \ b / Cependant, nous avons des classes de caractères dupliquées dans les options afin que nous puissions les extraire xxx

    cela fonctionne en utilisant un lookahead négatif < Code> (?! \ B0 [0-9]) 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 0 passe toujours comme valide.


1 commentaires

il n'enlève pas les chiffres même avec ces expressions régulières



1
votes

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)


4 commentaires

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.