2009-09-27 5 views
5

Я хочу, чтобы RegEx соответствовал значениям расстояния в метрической системе. Это регулярное выражение должно соответствовать 12m, 100cm, 1km игнорируя пробельныеRegEx для расстояния в метрической системе

+11

StackOverflow - ваши личные обезьяны программирования. – LiraNuna

+0

@ LiraNuna - уверен, это запрос lazyweb, но подумайте, что Google, вероятно, высоко оценит эту страницу для «метрического расстояния регулярного выражения» или аналогичного запроса, а различные ответы могут быть полезны для других. –

+0

@Paul Dixon: Было бы неплохо, однако, если бы оригинальный постер, по крайней мере, исправить эти очевидные опечатки. Существует огромное несоответствие между количеством усилий, выдвинутых вопрошающим, и количеством усилий, выдвигаемых теми, кто отвечает ... – Fragsworth

ответ

7

И продлить ответ Павла включать десятичные значения место ...

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

Хорошо, хотя я попытался создать простейшее регулярное выражение, которое соответствует общей схеме его примеров - целым значениям сантиметров, метров и километров. +1 - добро пожаловать в stackoverflow :) –

+1

Я сделал то же самое изначально, но когда вы избили меня на почту, я решил, что продюсирую его :), спасибо за приветствие. –

4

Как вы не указали точно, что вы хотите, я использовал свои примеры, чтобы получить, что вы хотите найти целое значение, а затем дополнительным пробелом, а затем блок спецификатор cm, m или km. Итак, это самый простой пример.

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

Первые круглые скобки фиксирует число, то он пропускает 0-много пробельных символов перед захватом ваши требуемые единицы во втором наборе скобок.

Как вы можете видеть в других ответах, вы можете выйти за рамки этого, чтобы получить десятичные значения, а также захватить более широкое число префиксов единиц СИ.

+0

, но это не сработает для 12 м. 20 см. – 2009-09-27 10:50:23

+1

. Фриман: Обычно ты обозначаешь дистанции? '12.2 м' - гораздо более естественный способ сказать это. – u0b34a0f6ae

11

Попробуйте это:

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

сначала подумал, что часть' yzafpnμmcdhkMGTPEZY' была шуткой, это SI-префиксы! :-) – u0b34a0f6ae

+1

И не забудьте дополнительные «квантификаторы», предложенные в обновлении 1993 года к файлу жаргона (http://catb.org/~esr/jargon/html/Q/quantifiers.html), а именно: groucho/grouchi и harpo/harpi. Не было предложено разрешить конфликт между G = Giga (1e9) и G = Grouchi (1e30). – pavium

+0

ах этот хороший. +1 –