【问题标题】:Regex for decimal or fraction小数或分数的正则表达式
【发布时间】:2016-01-11 18:26:40
【问题描述】:

现在我有一个正则表达式,它检查字符串是否为十进制格式:

-?\\d+(?:.\\d+)//any positive or negative number, including decimals

如果我想为分数创建一个正则表达式,它也可能包含小数,例如:

  • 3.1/2.6
  • 1.00/5.00

以下是否有效?

 -?\\(d+(?:.\\d+)|d+(?:.\\d+)/d+(?:.\\d+))//a decimal OR a fraction(including decimals)

【问题讨论】:

  • 你为什么在你的尝试中丢失了一些d+前面的“\\”?

标签: java regex


【解决方案1】:

您可以使用此正则表达式来支持正/负整数、带有可选小数部分的小数:

-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b

RegEx Demo

或者,如果您使用 Java 的 String#matches() 方法,请使用此正则表达式:

-?\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?

【讨论】:

  • 不过,您可能不希望在分母中使用 -?
  • 商定的负分母没有意义。
  • 为什么要加两个\\b?鉴于问题的措辞,该模式将用于匹配整个字符串,这意味着使用matches(),因此它们没有意义。
  • @Andreas:如果数字是一行中唯一的东西,那么使用它就是-?\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?
  • 1)您指的是“行”,但问题中没有任何内容说明输入来自文本文件等多行源。 2)String.matches()的替代品是Matcher.matches(),在预编译模式时使用。
【解决方案2】:

这是另一种解决方案。

正则表达式验证数字(正、负、小数)和分数

/[-]?[0-9]+[,.]?[0-9]*([\/][0-9]+[,.]?[0-9]*)*/g

来源:https://digitalfortress.tech/tricks/top-15-commonly-used-regex/

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    相关资源
    最近更新 更多