0
votes

Regex pour supprimer des virgules des nombres de moins de 10 000

J'ai besoin d'une seule regex pour dépasser les virgules de tous les nombres de moins de 10 000, par exemple 9999 mais 10 000, 1 000 000, etc.

Cela fonctionne correctement pour 9 999, ignore correctement 10 000, mais vis sur 1 000 000 (1000 000): P>

\b(?<![.,])(?<d1>\d{2})(?<d2>\d{3})(?!,)\b
$1,$2


2 commentaires

Quel langage de programmation utilisez-vous? Meilleurs chiffres de mach et les comparent par programme.


Désolé, j'ai oublié de mentionner que cela doit travailler dans .NET, alors \ k ne fonctionnera pas


3 Réponses :


0
votes

vous pouvez simplement insérer [0-9] {1-3} après votre expression de regex: xxx

ou quelque chose comme : xxx

fonctionnerait également.


1 commentaires

Merci pour cela, mais je ne pouvais pas obtenir ça pour travailler pour moi



1
votes

Pour faire correspondre les numéros de moins de 10 000 personnes, vous pouvez correspondre à un seul chiffre avant la virgule au lieu de 2 et correspond à 1 à 3 chiffres après la virgule pour correspondre également à 1,9 par exemple.

Pour éviter une correspondance partielle, vous pourrait affirmer les limites des espaces. xxx

Démo Regex


9 commentaires

UPvote mais il ne dépasserait pas de virgules de n'importe quelle position, mais une dernière position possible lorsque je l'ai testé. Vous vous êtes concentré sur la deuxième position pour la virgule?


@JVDV J'ai supposé que l'OP signifiait les valeurs de 0,0 à 9 999. Peut-être que j'ai mal interprété la question.


Merci! Malheureusement, cela correspond à "1,9" qui ne fonctionnera pas. J'ai des papiers scientifiques qui utilisent souvent des références exactement comme ceci.


@Randy, vous pouvez correspondre à 3 chiffres au lieu de 1-3 (? \ d), (?! \ S) Regex101.com/r/a3ywfr/1


@Le quatrième oiseau merci beaucoup! Fonctionne très bien! J'apprends beaucoup une plus grande regex ici! Je dois également vous assurer que tout a aussi les bonnes virgules, c'est-à-dire 1000000


@Randy est-ce que vous voulez dire 1000000 devrait devenir 1 000 000 ? Si tel est le cas, vous pouvez d'abord correspondre à tous les numéros (? regex101.com/r/4xapil/1 puis utilisez ce modèle (? <= \ d) (? = (?: \ d {3}) + ( ?!


@Le quatrième oiseau merci encore ... Travaillez bien, mais cela obtient également 9999, qui était mon problème d'orignal. Bien sûr, je suppose que je pourrais les exécuter séquentiellement, mais avec beaucoup de remplaçage, je ne suis pas sûr que cela fonctionnerait à chaque fois.


Vous pouvez utiliser un quantifier comme 7 ou plus {7,} pour spécifier le nombre de chiffres que vous souhaitez correspondre au premier (? Regex101.com/r/ia9xyd/1


@Le quatrième oiseau ne fonctionne pas encore pour moi. Je dois sortir pour une seconde. Reviendra dans un couple. Merci beaucoup pour votre aide!



1
votes

Voici mes deux centimes:

(?:^(?=(?:,*\d,*){1,4}$)|\G(?!^))\d*\K,(?!$)


5 commentaires

Ah je vois que tu veux dire :-) Je pensais que la virgule après les chiffres de la question où la ponctuation marque. Dans ce cas +1 (pas que \ g et \ k ne soient pas pris en charge dans tous les moteurs)


Vous pourriez être juste vous-même. Quoi qu'il en soit, j'espère que je les ai mis en œuvre correctement. J'ai appris cela à travers vos messages BYTW;) @thefourthbird


Je pense que vous devez utiliser \ g (?! ^) Voir cette exemple < / a> vs this exemple Si l'affirmation de 4 chiffres échoue, il évaluera le ou < Code> | , qui est vrai parce que \ g correspond à 2 positions. Ensuite, cela commencera le match. En utilisant \ g (?! ^) évitera cela.


Génial, je vais garder ça à l'esprit! Merci pour l'aperçu.


Merci beaucoup pour vos efforts les gars! Désolé, j'ai oublié de mentionner que cela doit travailler dans .net, il semble donc que \ k ne fonctionne pas ...