6

我想要一个RegEx匹配公制中的距离值。此正则表达式应匹配12m, 100cm,1km忽略空格

4

4 回答 4

12

尝试这个:

(?:0|[1-9]\d*)\s*(?:da|[yzafpnμmcdhkMGTPEZY])?m
于 2009-09-27T10:30:11.717 回答
7

并扩展保罗的答案以包括小数位值......

(\d+).?(\d*)\s*(m|cm|km)
于 2009-09-27T10:35:42.127 回答
4

由于您没有具体说明您想要什么,我使用您的示例得出您想要找到一个整数值,后跟可选空格,后跟 cm、m 或 km 的单位说明符。所以 - 这是最简单的例子。

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

第一个括号捕获数字,然后在第二组括号中捕获所需的单位之前跳过 0 个空格字符。

正如您在其他答案中看到的那样,您可以超越这一点来获取十进制值,还可以捕获更多数量的 SI 单位前缀。

于 2009-09-27T10:29:13.170 回答
0

以下正则表达式需要精确的数字匹配。并且最多保留 4 位小数。

^(\d+)[.,]?(\d{1,4})$

并可选择带一个单元

^(\d+)[.,]?(\d{1,4})\s*(mm|m|cm|km)$

和单元之间有一个空间

^(\d+)[.,]?(\d{1,4})[ ]?(mm|m|cm|km)$

匹配:
123
123,456
134.456

不匹配:
abc
abc,456
123abc
123,abc

于 2021-06-24T11:40:31.137 回答