如何使用可选的小数分隔符解析double

时间:2014-12-09 05:15:43

标签: c# .net regex

我想用像

这样的单位解析数字
3cm
3.44 cm
12,33  mm

以下表达式完全符合我的要求

(([0-9]*(?:[,.]?[0-9]*?))[\s]*(cm|mm))

但问题是它还匹配

之类的东西
cm 22.1   cm

在这种情况下,它会忽略数字并仅匹配第一个cm,如何忽略第一个cm?

3 个答案:

答案 0 :(得分:2)

您可以将第一个数字匹配量词从零或更多(*)更新为一个或多个(+):

(([0-9]+(?:[,.]?[0-9]*?))[\s]*(cm|mm))

答案 1 :(得分:1)

\d+(?:[.,]\d+)?\s*(?:cm|mm)

试试这个。看看演示。

https://regex101.com/r/qJ8qW5/2

答案 2 :(得分:1)

与其他人一样,您需要将量词*更改为+,其中*代表零或更多,+代表一个或多个。如果你想匹配12,533.45 cm之类的数字,那么你可以使用下面的正则表达式。

[0-9]+(?:,[0-9]+)*(?:\.[0-9]+)?\s*(?:cm|mm)

DEMO