Java replaceAll()来拉取数字和句点

时间:2014-06-23 16:36:40

标签: java regex replaceall

我有一行输出类似于" Spec-Version:11.3.0"。我正在努力使用replaceAll()来使用句点来拉出版本。现在我有这样的事情:

version = line.replaceAll("[\\D+\\.]" , "");

有了这个我得到的版本:

1130

无论我使用什么语法组合,我都会丢失句号或拉动整行。

感谢任何帮助。

6 个答案:

答案 0 :(得分:1)

以下正则表达式会将版本号存储在第一组中。用第一组替换整个字符串。

:\s*(.*$)

您的java字符串为":\\s*(.*$)"

DEMO

答案 1 :(得分:1)

你正在做的是删除一段时间,或者不是数字(包括句号)。

尝试"[^\\d\\.]"

答案 2 :(得分:0)

你的替换是摆脱任何数字或句号。

version = line.replaceAll("[^\\.\\d]" , "");

应该替换任何不是数字而不是句号的内容

答案 3 :(得分:0)

/[^\d.]/g

取代任何不是数字或"。"。

Here is a demo at Regexr

答案 4 :(得分:0)

这么多答案会尝试这种模式来匹配您的请求 ([\d.]+)$
Demo

替换版本使用此模式
^.*?(?=[\d.]+$)
Demo

答案 5 :(得分:0)

正如其他人提到的,这是捕获组的完美用例。在java中,您可以编写以下内容:

String regex = ".*Spec-Version: ([\\d\\.]+).*";

Pattern pattern = Pattern.compile(regex);

Matcher matcher = pattern.matcher("as asdgf sdf as Spec-Version: 12.3.1 asda sd]");

if (matcher.matches()) {
  System.out.println("Match found");
  System.out.println(matcher.group(1));
}

您需要在每行文字上尝试匹配。我推荐这个而不是replaceAll,因为它在将来肯定会更灵活。实际上,您将能够匹配以下字符串:

pattern
  .matcher("124442 1 2.23.4.12 as asdgf sdf as Spec-Version: 12.3.1 asda sd] 12.12314.15421");

虽然在上面的情况中,replaceAll会给出' 12444212.23.4.1212.3.112.12314.15421',这不是你想要的。