2009-09-27 8 views
5

Desidero un valore RegEx per corrispondere ai valori di distanza nel sistema metrico. Questa espressione regolare deve corrispondere 12m, 100cm, 1km ignorando lo spazio biancoRegEx per la distanza nel sistema metrico

+11

StackOverflow - tue scimmie di programmazione personali. – LiraNuna

+0

@LiraNuna - certo, è una richiesta lazyweb, ma considera che Google probabilmente classificherà questa pagina molto bene per "regex metric distance" o query simili, e le varie risposte potrebbero essere utili per gli altri. –

+0

@Paul Dixon: Sarebbe bello, tuttavia, se il poster originale avrebbe almeno corretto quegli errori di battitura evidenti. Esiste un'enorme disparità tra la quantità di sforzi messi in gioco dall'interrogante e la quantità di sforzi messi in atto da coloro che rispondono ... – Fragsworth

risposta

7

E per estendere la risposta di Paolo di includere i valori decimali luogo ...

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

Un buon punto, anche se ho provato a produrre la regex più semplice che corrisponda al modello generale dei suoi esempi: valori interi di centimetri, metri e chilometri. +1 - benvenuto allo stackoverflow :) –

+1

Ho fatto lo stesso in origine, ma quando mi hai battuto sul post, ho pensato di estenderlo :), grazie per il benvenuto. –

4

Come non è stato specificato esattamente quello che voleva, ho usato i tuoi esempi di ricavare che si desidera trovare un valore intero, seguito da spazio bianco opzionale, seguito da un'unità specificatore di cm, m o km. Quindi - questo è l'esempio più semplice di questo.

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

I primi parentesi cattura il numero, quindi salta 0-molti caratteri di spazio bianco prima di scattare le vostre unità richieste nel secondo set di parentesi.

Come si può vedere in altre risposte, è possibile andare oltre per raccogliere i valori decimali e anche catturare un numero più ampio di prefissi dell'unità SI.

+0

ma questo non funzionerà per 12m 20cm –

+1

Freeman: Normalmente noti le distanze in questo modo? '12,2 m' è un modo molto più naturale per dirlo .. – u0b34a0f6ae

11

Prova questo:

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

prima pensavo che la parte' yzafpnμmcdhkMGTPEZY' fosse uno scherzo, quelli sono i prefissi SI! :-) – u0b34a0f6ae

+1

E non dimenticare i "quantificatori" aggiuntivi proposti in un aggiornamento del 1993 al Jargon File (http://catb.org/~esr/jargon/html/Q/quantifiers.html), ovvero groucho/grouchi e harpo/harpi. Non è stato suggerito come il conflitto tra G = Giga (1e9) e G = Grouchi (1e30) potrebbe essere risolto. – pavium

+0

ah questo è buono. +1 –

Problemi correlati