【问题标题】:regex numbers and decimal points [duplicate]正则表达式数字和小数点[重复]
【发布时间】:2019-06-19 20:14:44
【问题描述】:

你们中的任何人都可以帮助我使用正则表达式来允许这样做吗:

123.123
123.
1323.2
1.2312
1,23
123123,32
123,
123412

总结一下:只有一个小数点,它可以是最后一个..但大多数不是第一个。

但不是这个:

12.323.323
1213..
12331...3123
.12313
,123132 

【问题讨论】:

  • 少一点Regex 多一点Parse 我建议。
  • 试试decimal.Parsedouble.Parse
  • 123(没有小数点)呢?允许吗?

标签: c# regex


【解决方案1】:

这应该可以工作

^\d+[\.,]?\d*$

^ 字符串开头
\d+ 1 位或多位数字
[\.,]? 0 位或 1 位小数或逗号
\d* 0 位或多位数字
$ 结尾字符串。

【讨论】:

  • 中间的部分是可选的。如果没有逗号或句点,则可以将其解释为一个或多个数字后跟零个或多个数字,从而导致歧义,并可能影响某些引擎的性能。此外,在他提供的示例中,小数点分隔符不是可选的
  • 谢谢,我已经相应地编辑了它
  • 哎呀..犯了一个错误..小数点或逗号必须是可选的..
  • 好的,我已经改回来了
  • 啊好吧...我的错然后:D
【解决方案2】:
\b\d+(\.|,)\d*\b

意思是:

a word boundary
a digit one or more times
a `.` or a `,`
a digit zero or more times
a word boundary

单词边界是为了防止正则表达式从数字中间匹配

【讨论】:

  • 这是一个简单的,但它也会匹配一个 , 或 .通过它自己。要处理这种情况,您需要对其进行更改以处理单独的情况(数字、前面、后面或两者)。我将把它留给你,因为修改这个正则表达式将帮助你理解它
【解决方案3】:

试试这个,它适用于您提到的所有情况。

(\d+)(((\.|,)\d+)|,))

【讨论】:

  • 你需要用\.转义.,否则它会匹配123a123之类的东西。
  • 我在这里测试了gskinner.com/RegExr 并且它有效!
【解决方案4】:

我对您的正则表达式的修复: (\d+)(((.|,)\d+)|,)? 添加 '?'最后,它将适用于零值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2012-06-10
    • 2021-08-04
    • 2018-07-16
    相关资源
    最近更新 更多