10
votes

Regex - Rechercher des chiffres entre 2000 et 3000

J'ai besoin de rechercher tous les numéros avec 4 chiffres compris entre 2000 et 3000.

Ce peut être que les lettres sont avant et après.

Je pensais pouvoir utiliser [2000-3000] {4} , mais ne fonctionne pas, pourquoi?

merci.


1 commentaires

Au lieu d'expliquer pourquoi cela ne fonctionne pas, je vous demande: comment espérez-vous exactement que cela fonctionne? Et quelle règle de regex vous attendez-vous à déclencher ce comportement?


6 Réponses :


3
votes

humidité difficile. Le tableau de bord - s'applique uniquement au personnage immédiatement avant et après, ce que votre regex correspondait réellement à 4 caractères entre 0 et 3 inclus (c.-à-d. 0, 1, 2 et 3). Par exemple, 3210, 1230, 3333, etc ... Essayez l'expression ci-dessous.

(2 [0-9] {3}) | (3000)


0 commentaires

25
votes

Que diriez-vous de

(?<![0-9])(?:2[0-9]{3}|3000)(?![0-9])


13 commentaires

+1 Bien que je pense que les marqueurs de début / fin ne sont pas vraiment nécessaires car nous allons capturer tous les chiffres.


Est \ d garanti pour correspondre juste [0-9] ou dépend-il de la locale?


12000 ne doit pas correspondre comme 2000 , n'est-ce pas?


Ajoutez une limite de mot \ b au lieu de ^ et $ @ su.mark l'avez-vous fait CW de rester à 10k pour toujours?


Qui correspond 13000 aussi (ou A3000 ). It mathces ^ 2 \ d {3} ou 3000 $ : vous devez ajouter une parenthèse.


@Amarghosh, pour aujourd'hui au moins. :RÉ


@ S.Mark Apparemment, vous êtes en sécurité pour la journée de toute façon - j'ai essayé de gâcher vos plans en votant sur un autre message, mais vous semblez avoir frappé le rep-capuchon;) Vous obtiendriez un badge de réponse agréable.


Maintenant, j'ai changé en (?:: 3 [0-9] {3} | 10000), pour obtenir tout entre 3000 et 10000, il ne trouvera pas 4000.


Ce serait (?: [3-9] [0-9] {3} | 10000)


@ Su.mark, de la question ", il peut s'agir de ces lettres avant et après"


Cela fonctionne pour ma solution maintenant, mais je devais enlever le?: Qu'est-ce que cela signifie "?:"?, Merci à tous.


@snarebold ?: fait un groupe entre parenthèses non capturant. Considérez la chaîne "abbbcccd" et regregs a (b +) (C +) d et A (?: B +) (C +) d . Les résultats correspondants de la première regex contiendront BBB dans le premier groupe et CCC au deuxième groupe. Les résultats de Deuxième regex contiendront CCC dans son premier groupe (et seulement) groupe comme (b +) groupe ont été fabriqués sans capture en utilisant ?: Voir régulier-expressions.info/brackets.html pour plus d'informations.


Veuillez jeter un oeil ici MSDN.Microsoft.com/fr- US / Bibliothèque / 1400241x (vs.85) .aspx et rechercher (? Modèle)



2
votes

Il est expliqué pourquoi et façons de détecter les gammes: http: //www.regular-expressions. info / numericranges.html


0 commentaires

2
votes

Corriger regex sera \ b (2 \ d {3} | 3000) \ b . Cela signifie: Match Caractère '2' puis trois chiffres (cela correspondra à partir de 2000 à 2999) ou de correspondre simplement à "3000". Il existe de bons tutoriels sur des expressions régulières:

  1. http://gnose.cx/publish/programming/regular_expressions.html
  2. http://immike.net/blog/2007/04/06/THE-ABSOLUTE-BARE-MINIMIMUM-TERY-PROGREMMER-HOULD-SPRESSIONS/
  3. http://www.regular-expressions.info/

0 commentaires

0
votes

Pourquoi ne vérifiez-vous pas plus ou moins que? sa plus simple qu'une regex xxx


0 commentaires

9
votes

Les expressions régulières sont rarement adaptés pour le contrôle de gammes depuis pour les plages comme 27 à 9076 inclus, ils deviennent incroyablement laid. Il peut em> être fait, mais vous êtes vraiment mieux faire juste une expression régulière pour vérifier les valeurs numériques, quelque chose comme:

^2[7-9]|[3-9][9-9]|[1-9][0-9]{2}|[1-8][0-9]{3}|90[0-6][0-9]|907[0-6]$


0 commentaires