只移除数字之间的空格的正则表达式

13

我需要仅移除数字之间的空格,使得像这样的字符串:

"Hello 111 222 333 World!"

变成

"Hello 111222333 World!"

我尝试过这个:

message = message.replaceAll("[\\d+](\\s+)[\\d+]", "");

似乎完成不了。


那个过程做什么? - stmfunk
@stmfunk 正在尝试通过重新格式化所有数字为统一格式,然后提取其中的电话号码。 - Badr Ghatasheh
2个回答

29
你可以使用基于正则表达式的环视来实现此功能:
 String repl = "Hello 111 222 333 World!".replaceAll("(?<=\\d) +(?=\\d)", "");
 //=> Hello 111222333 World!

这个正则表达式 "(?<=\\d) +(?=\\d)" 确保匹配前后有数字的空格。


2
但是正如您在这里看到的:http://regex101.com/r/zL6yH3,使用(\\d) (\\d)无法将1 2 3转换为123 - anubhava
1
(\\d) +(?=\\d)并用$1替换是否可行?如果要避免使用后顾(lookbehind)呢? - Jonny 5
1
太棒了!只是要注意的是,如果数字后面紧跟着另一个数字,那么就无法正确处理 - “Hello 111 222 333 20World”会变成“Hello 11122233320World”。为此,模式应该是(?<=\\d) +(?=\\d ) - 第二组应该带有尾随空格。 - stuartd
2
Javascript代码:thestring.replace(/(?<=\d) +(?=\d)/g, ''); - Avatar
1
@Avatar:这个问题是关于Java的,因此给出了回顾解决方案。话虽如此,现代JavaScript也支持回顾,但Safari尚未现代化。 - anubhava
显示剩余4条评论

2
如何呢:
message = "Hello 111 222 333 World!".replaceAll("(\\d)\\s(\\d)", "$1$2");

提供:

"Hello 111222333 World!"

这是一个适用于不支持环视的正则表达式引擎的好解决方案。在某些情况下,您必须运行此函数两次以替换所有出现的内容。 - Jeremy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接