【问题标题】: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 尝试通过将所有号码重新格式化为单一格式,然后提取它们来提取电话号码

标签: java android regex


【解决方案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 ) - 第二组有一个尾随空格。
  • 对于 Javascript:thestring.replace(/(?&lt;=\d) +(?=\d)/g, '');
  • @Avatar:这个问题是关于 Java 的,因此给出了后向解决方案。话虽如此,现代 Javascript 也支持后视,但 Safari 尚未现代化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多