正则表达式仅删除数字之间的空格
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!
此正则表达式 "(?<=\\d) +(?=\\d)"
确保匹配数字前后的空格。
【讨论】:
但是你可以在这里看到:http://regex101.com/r/zL6yH3
1 2 3
不能变成 123
和 (\\d) (\\d)
(\\d) +(?=\\d)
并替换为 $1
应该也可以吗?如果想避免向后看
太棒了!请注意,如果紧跟在数字后面的单词也以数字开头,则处理不正确 - "Hello 111 222 333 20World" 变为 "Hello 11122233320World"。为此,模式应该是(?<=\\d) +(?=\\d )
- 第二组有一个尾随空格。
对于 javascript:thestring.replace(/(?<=\d) +(?=\d)/g, '');
@Avatar:这个问题是关于 Java 的,因此给出了后向解决方案。话虽如此,现代 Javascript 也支持后视,但 Safari 尚未现代化。以上是关于正则表达式仅删除数字之间的空格的主要内容,如果未能解决你的问题,请参考以下文章