正则表达式仅删除数字之间的空格

Posted

技术标签:

【中文标题】正则表达式仅删除数字之间的空格【英文标题】:Regex to remove spaces between numbers only 【发布时间】:2014-06-26 23:34:00 【问题描述】:

我只需要删除数字之间的空格,这样的字符串:

"Hello 111 222 333 World!"

变成

"Hello 111222333 World!"

我试过了:

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

似乎没有完成。

【问题讨论】:

这个过程是做什么的? @stmfunk 尝试通过将所有号码重新格式化为单一格式,然后提取它们来提取电话号码 【参考方案1】:

怎么样:

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

给予:

"Hello 111222333 World!"

【讨论】:

对于不支持环视的正则表达式引擎来说,这是一个很好的解决方案。在某些情况下,您必须运行此函数两​​次才能替换所有匹配项。【参考方案2】:

您可以使用这个基于环视的正则表达式:

 String repl = "Hello 111 222 333 World!".replaceAll("(?<=\\d) +(?=\\d)", "");
 //=> Hello 111222333 World!

此正则表达式 "(?&lt;=\\d) +(?=\\d)" 确保匹配数字前后的空格。

【讨论】:

但是你可以在这里看到:http://regex101.com/r/zL6yH3 1 2 3 不能变成 123(\\d) (\\d) (\\d) +(?=\\d) 并替换为 $1 应该也可以吗?如果想避免向后看 太棒了!请注意,如果紧跟在数字后面的单词也以数字开头,则处理不正确 - "Hello 111 222 333 20World" 变为 "Hello 11122233320World"。为此,模式应该是(?&lt;=\\d) +(?=\\d ) - 第二组有一个尾随空格。 对于 javascriptthestring.replace(/(?&lt;=\d) +(?=\d)/g, ''); @Avatar:这个问题是关于 Java 的,因此给出了后向解决方案。话虽如此,现代 Javascript 也支持后视,但 Safari 尚未现代化。

以上是关于正则表达式仅删除数字之间的空格的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 使用正则表达式仅验证字母、数字和空格

将字母和数字匹配在一起或仅匹配字母的正则表达式

需要一个正则表达式来删除除数字之外的所有内容

正则表达式学习总结

Oracle 正则表达式 - 删除字符串中长度为 1 的字母标记之间的空格

正则表达式替换以删除 html 标记之间的空格