2012-01-10 133 views
-7

您好我需要匹配这种格式自定义的正则表达式

N - Number 

NN,NN 

NN.NN 

N,N and N.N 

和组合

N.NN and N,NN or NN,N and NN.N 
+6

这是习惯在计算器上提供的,你已经尝试过什么(一直找不到工作)片段表明,你已经努力自己解决这个问题。 – Reddog 2012-01-10 20:42:19

+0

我的不好。下一次我会尝试更多:-) – user49126 2012-01-11 08:56:17

回答

1

如何:

\d{1,2}(?:[.,]\d{1,2})? 

解释:

\d{1,2} : one or two digits 
(?:  : start non capture group 
    [.,] : . or , 
    \d{1,2} : one or two digits 
)?  : end group, optional 
+0

+1解释 – user49126 2012-01-11 11:50:59

+0

@ user49126:谢谢。 – Toto 2012-01-11 12:16:50

+0

建议:使用[IgnorePatternWhitespace](http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=zh-CN&k=k(SYSTEM.TEXT.REGULAREXPRESSIONS.REGEXOPTIONS.IGNOREPATTERNWHITESPACE); k (TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22); k(DevLang-CSHARP)&rd = true),它具有#的实际正则表达式模式注释转义。它也允许在多行上传播模式。 – OmegaMan 2012-01-11 14:37:53

2

这是你的正则表达式:

\d{1,2}[.,]\d{1,2} 

在这里看到它在行动:http://regexr.com?2vman


这里有一个稍微不同的版本:

\d\d?[.,]\d\d? 

在这里看到它在行动:http://regexr.com?2vmaq


如果你想同时匹配出小数,使用此:

\d\d?[.,]?\d{0,2} 

看到它在这里的行动:http://regexr.com?2vml4

+0

工程很好,但我忘了再提一个条件。它可以只是一个没有或没有的数字。例如只需3 – user49126 2012-01-11 08:51:35

+1

@ user49126 - 查看我的答案更新。 – 2012-01-11 15:13:32

0

我会像这样的东西去:

Regex regex = new Regex(@"\d{1,2}[\.,]\d{1,2}"); 
+1

无需转义括号内的'.' ... – 2012-01-10 20:44:24

1

为什么匹配吗?

只需删除逗号和使用的实际数量:

Regex.Replace("8,675,309.02", "(,)", string.Empty) // Outputs 8675309.02 

如果这是一个验证的情况下,使用int.Parse会让你知道,如果它有效。