正则表达式将多个数字与一行中的空格合并

时间:2017-05-23 10:31:27

标签: java regex

我需要一个正则表达式来合并一行中的多个数字,而不是将它们全部合并在一起。

示例行:

Hello World9.99 123 456.00 7 890 123.45 0.97

我想要的输出是:

Hello World9.99 123456.00 7890123.45 0.97

我知道基本的正则表达式,但没有前瞻/后面的经验。

到目前为止,我创建了这个方法:

final String regex = "(?<!\\.\\d{1,3})\\s+(?=\\d{1,3}\\.?\\d{2}?)";

public String mergeNumbers(String s){
    return s.replaceAll(regex, "");
}

如果与单词绑定的数字有一个点,则此方法可以正常工作。

但我不知道如何在开头没有点的情况下匹配这条线:

Hello World99 123 456.00 7 890 123.45 0.97

这是回归:

Hello World99123456.00 7890123.45 0.97

但我想:

Hello World99 123456.00 7890123.45 0.97

所以我的问题是:

如何修改我的正则表达式以匹配这两种情况?

1 个答案:

答案 0 :(得分:3)

我建议使用

.replaceAll("\\b(?<!\\.)(\\d+)\\s+(?=\\d)", "$1")

请参阅regex demo

<强>详情:

  • \b - 字边界
  • (?<!\.) - 当前位置之前可能没有.
  • (\d+) - 第1组(从字符串替换模式引用$1反向引用):一个或多个数字
  • \s+ - 1+空格
  • (?=\\d) - 当前位置右侧必须有一个数字。