我需要一个正则表达式来合并一行中的多个数字,而不是将它们全部合并在一起。
示例行:
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
所以我的问题是:
如何修改我的正则表达式以匹配这两种情况?
最佳答案
我建议使用
.replaceAll("\\b(?<!\\.)(\\d+)\\s+(?=\\d)", "$1")
参见 regex demo .
详细信息:
-
\b
- 单词边界 -
(?<!\.)
- 不可能有.
就在当前位置之前 -
(\d+)
- 第 1 组(用$1
从字符串替换模式中引用):一个或多个数字 -
\s+
- 1+ 个空格 -
(?=\\d)
- 当前位置的右边必须有一个数字。
关于java - 正则表达式将多个数字与一行中的空格合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44132305/