2009-09-27 11 views
5

Je souhaite que RegEx corresponde aux valeurs de distance dans le système métrique. Cette regex doit correspondre 12m, 100cm, 1km ignorant l'espace blancRegEx pour la distance dans le système métrique

+11

StackOverflow - vos singes programmation personnelle. – LiraNuna

+0

@LiraNuna - bien sûr, c'est une requête lazyweb, mais sachez que Google classera probablement cette page très haut pour la "distance métrique regex" ou une requête similaire, et les réponses variées peuvent être utiles pour d'autres. –

+0

@Paul Dixon: Ce serait bien, cependant, que l'affiche originale répare au moins ces fautes de frappe évidentes. Il ya une énorme disparité entre le montant de l'effort mis en avant par le questionneur, et la quantité d'efforts mis en avant par ceux qui répondent ... – Fragsworth

Répondre

7

Et pour prolonger la réponse de Paul d'inclure des valeurs décimales ... La place

(\d+).?(\d*)\s*(m|cm|km) 
+0

Bon point, même si j'ai essayé de produire la regex la plus simple qui corresponde au modèle général de ses exemples - valeurs entières de centimètres, mètres et kilomètres. +1 - bienvenue à stackoverflow :) –

+1

J'ai fait la même chose à l'origine, mais quand vous m'avez battu à la poste, je me suis dit que je l'étendrais :), merci pour l'accueil. –

4

Comme vous ne spécifiez pas exactement ce que vous vouliez, je vos exemples pour obtenir que vous voulez trouver une valeur entière, suivie par des espaces en option, suivi d'une unité spécificateur de cm, m ou km. Donc - c'est l'exemple le plus simple de cela.

/(\d+)\s*(m|cm|km)/ 

Les premiers entre parenthèses capture le numéro, puis il passe 0-plusieurs caractères blancs avant de capturer vos unités requises dans le deuxième ensemble de parenthèses.

Comme vous pouvez le voir dans les autres réponses, vous pouvez aller au-delà pour prendre des valeurs décimales et également capturer un plus grand nombre de préfixes d'unités SI.

+0

mais cela ne fonctionnera pas pour 12m 20cm –

+1

Freeman: Notez-vous normalement les distances de cette façon? '12,2 m' est une façon beaucoup plus naturelle de le dire .. – u0b34a0f6ae

11

Essayez ceci:

(?:0|[1-9]\d*)\s*(?:da|[yzafpnμmcdhkMGTPEZY])?m 
+0

d'abord pensé que la partie' yzafpnμmcdhkMGTPEZY' était une blague, ce sont les préfixes SI! :-) – u0b34a0f6ae

+1

Et n'oubliez pas les 'quantificateurs' supplémentaires proposés dans une mise à jour de 1993 du fichier de jargon (http://catb.org/~esr/jargon/html/Q/quantifiers.html), à savoir, groucho/grouchi et harpo/harpi. Il n'a pas été suggéré comment le conflit entre G = Giga (1e9) et G = Grouchi (1e30) pourrait être résolu. – pavium

+0

ah celui-ci est bon. +1 –