REGEX从hypen中提取两个双数

时间:2019-04-06 13:35:02

标签: java regex

我有这样的字符串:

tf.nn.softmax_cross_entropy_with_logits_v2()

我必须检查字符串格式是否包含由连字符分隔的两个数字。

我该怎么办?

谢谢

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式:

^\d+(\.\d+)?-\d+(\.\d+)?$

可以找到说明here


使用Java,您可以创建一种方法来检查所需模式是否存在:

public static boolean returnMatch(String input) {
    Pattern p1 = Pattern.compile("^\\d+(\\.\\d+)?-\\d+(\\.\\d+)?$");
    Matcher m1 = p1.matcher(input);

    return m1.find() ? true : false;
}

现在使用:

System.out.println(returnMatch("some foo text"));  // false
System.out.println(returnMatch("1.00-2.00"));      // true
System.out.println(returnMatch("2.12-2.12"));      // true
System.out.println(returnMatch("10-20"));          // true

答案 1 :(得分:1)

浮点数的正则表达式为:^[1-9]\d*\.\d+$(如果小数可选):^[1-9]\d*(?:\.\d+)?$

在连字符之间重复两次:

`^[1-9]\d*(?:\.\d+)?-[1-9]\d*(?:\.\d+)?$`

答案 2 :(得分:1)

使用简单的正则表达式:

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

此解决方案假定始终存在 小数部分(至少一位)。演示在Regex101

  • \d是一个数字
  • \d+至少为一位数字
  • \.从字面上匹配一个点(.
  • ()是一个捕获小组
  • (?:\.\d+)?是一个非捕获组,可以选择匹配小数部分

不要忘记Java String regex = "(\\d+(?:\\.\\d+)?)-(\\d+(?:\\.\\d+)?)";

中的正确转义

如果破折号和数字之间出现一个或多个空格或空白字符,use

(\d+(?:\.\d+)?)\s*-\s*(\d+(?:\.\d+)?)