正则表达式,字符串浮动数字,摆脱其他字符

时间:2014-07-12 18:27:12

标签: java regex

使用像123.456mm这样的Stings,我希望得到一个带有数字的字符串,另一个带有测量结果。所以在上面的例子中,一个字符串包含123.456,另一个字符串包含mm。到目前为止,我有这个:

String str = "123.456mm";

String length = str.replaceAll("[\\D|\\.*]+","");
String lengthMeasurement = str.replaceAll("[\\W\\d]+","");

println(length, lengthMeasurement);

输出结果为:

123456 mm

点已经消失,我无法取回它。 我怎么能留点?

3 个答案:

答案 0 :(得分:2)

您可以使用:

String str = "123.456mm";

String length = str.replaceAll("[^\\d.]+",""); // 123.456
String lengthMeasurement = str.replaceAll("[\\d.]+",""); // mm

答案 1 :(得分:0)

使用以下正则表达式尝试PatternMatcher,并从索引1和2获取匹配的组。

(\d+\.?\d*)(\D+)

Online demo

尝试以下示例代码:

String str = "123.456mm";

Pattern p = Pattern.compile("(\\d+\\.?\\d*)(\\D+)");
Matcher m = p.matcher(str);
if (m.find()) {
    System.out.println("Length: " + m.group(1));
    System.out.println("Measurement : " + m.group(2));
}

输出:

Length:123.456
Measurement :mm

模式描述:

  (                        group and capture to \1:
    \d+                      digits (0-9) (1 or more times)
    \.?                      '.' (optional (0 or 1 time))
    \d*                      digits (0-9) (0 or more times)
  )                        end of \1

  (                        group and capture to \2:
    \D+                      non-digits (all but 0-9) (1 or more times)
  )                        end of \2

答案 2 :(得分:0)

尝试,

String str = "123.456mm";

String str1 = str.replaceAll("[a-zA-Z]", "");
String str2 = str.replaceAll("\\d|\\.", "");

System.out.println(str1);
System.out.println(str2);

输出:

123.456
mm