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

C# 如何使用可选的小数分隔符解析double,c#,.net,regex,C#,.net,Regex,我想用像这样的单位来解析数字 3cm 3.44 cm 12,33 mm 下面的表达式正是我想要的 (([0-9]*(?:[,.]?[0-9]*?))[\s]*(cm|mm)) 但问题是,它也与以下内容相匹配 cm 22.1 cm 在这种情况下,它会忽略数字并仅匹配第一个cm,如何忽略第一个cm \d+(?:[.,]\d+)?\s*(?:cm|mm) 试试这个。看演示 试试这个。看演示 您可以将第一个数字匹配量词从零或多个(*)更新为一个或多个(+): 您可以将第一个数字匹配量词从

我想用像这样的单位来解析数字

3cm
3.44 cm
12,33  mm
下面的表达式正是我想要的

(([0-9]*(?:[,.]?[0-9]*?))[\s]*(cm|mm))
但问题是,它也与以下内容相匹配

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

\d+(?:[.,]\d+)?\s*(?:cm|mm)
试试这个。看演示

试试这个。看演示


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


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


正如其他人所说,您需要将量词
*
更改为
+
,其中
*
表示零或多个,而
+
表示一个或多个。如果您还想匹配像
12533.45 cm
这样的数字,那么您可以使用下面的正则表达式

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

正如其他人所说,您需要将量词
*
更改为
+
,其中
*
表示零或多个,而
+
表示一个或多个。如果您还想匹配像
12533.45 cm
这样的数字,那么您可以使用下面的正则表达式

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

请注意,.NET中的
\d
默认与Unicode数字匹配。请注意,.NET中的
\d
默认与Unicode数字匹配。