10
votes

Comment puis-je écrire une regex pour trouver uniquement des chiffres avec quatre chiffres?

J'essaie d'écrire une regex dans Ruby pour rechercher une chaîne pour des chiffres de seulement quatre chiffres. J'utilise de
/ \ d {4} / mais cela me donne un numéro avec quatre chiffres de quatre et plus.

EG: " 12345-456-6575 Quelque texte 9897 "

Dans ce cas, je veux seulement 9897 et 6575 mais je reçois aussi 1234 qui a une longueur de cinq caractères.


3 commentaires

Vous pouvez utiliser ce site pour tester votre expression régulière: http://rubular.com/ @Dogbert est juste par le manière, juste testé sa regex ...


Devrait-il correspondre 1234 dans abcd1234efgh ?


Vous pouvez utiliser ce site pour tester votre expression régulière: Rubular.com @Dogbert est juste à côté, il suffit de tester son regex ...


6 Réponses :


1
votes

Vous devez ajouter une condition de plus à votre expression: le numéro ne peut être retourné que s'il y a 4 chiffres et le caractère avant et après que le nombre à 4 chiffres doit être un numéro non-numéro.


1 commentaires

Et s'il n'y a pas de caractère avant ou après le numéro?



18
votes
"12345-456-6575 some text 9897".scan(/\b\d{4}\b/)
=> ["6575", "9897"]

1 commentaires

Le \ B est pratique car il correspondra au début, à la fin ou à un mot "rupture".



-1
votes

Vous devez spécifier un séparateur pour le motif. Comme si les chiffres seraient précédés et suivis d'un espace, la regex serait / \ s \ d {4} \ s / , espérons que cela aide.


1 commentaires

C'est faux. a) Il échoue sur son exemple où les chiffres sont séparés par des tirets. b) Il échoue au début et à la fin de la chaîne. c) Il échoue même avec des espaces en tant que séparateurs s'il n'y a qu'un seul espace entre les nombres. REGARDER A 1234 5678 B : le deuxième \ s consomme le deuxième espace, alors la prochaine fois que la regex est appliquée, elle échoue car le moteur Regex est maintenant au début du deuxième numéro.



3
votes

Essayez correspondant à une limite de mot ( \ b ) des deux côtés de la séquence à quatre chiffres: xxx


0 commentaires

0
votes

ou encore plus généralement: tout sauf un chiffre avant et / ou après les quatre chiffres:

/\D\d{4}\D/


3 commentaires

Cela ne saisit que la première occurrence d'un nombre à 4 chiffres.


Cela échoue au début et à la fin de la chaîne, et il échoue lorsque des séquences de 4 chiffres sont séparées par un autre caractère (comme 1234-5678-9999 ) car le \ d doit consommer un personnage.


@AJC: En JavaScript, peut-être. Pas en rubis.



0
votes

ESSAY / [0-9] [0-9] [0-9] [0-9] [^ 0-9] /


2 commentaires

Cela échoue à la fin de la chaîne, et il correspond toujours à cinq chiffres - il correspondra à 2345 dans 12345-54321 .


@Tim, oui. Il est faux. Dogbert a un bon je pense. Merci d'avoir signalé l'erreur.