我需要一个正则表达式来合并一行中的多个数字,而不是将它们全部合并在一起。
示例行:
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
所以我的问题是:
如何修改我的正则表达式以匹配这两种情况?
答案 0 :(得分:3)
我建议使用
.replaceAll("\\b(?<!\\.)(\\d+)\\s+(?=\\d)", "$1")
请参阅regex demo。
<强>详情:
\b
- 字边界(?<!\.)
- 当前位置之前可能没有.
(\d+)
- 第1组(从字符串替换模式引用$1
反向引用):一个或多个数字\s+
- 1+空格(?=\\d)
- 当前位置右侧必须有一个数字。