首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将多个空间替换为单个空间(不包括前导空间)的Regex

将多个空间替换为单个空间(不包括前导空间)的Regex
EN

Stack Overflow用户
提问于 2016-07-05 14:45:57
回答 3查看 2.8K关注 0票数 2

我正在尝试编写一个正则表达式,它将捕获两个或多个空白空间,不包括领先的空白空间。以下面这个例子为例

代码语言:javascript
运行
复制
One OS to rule them     all,
    One  OS  to  find    them.
    One     OS to call them    all,
    And  in  salvation    bind         them.
    In  the  bright  land  of  Linux,
    Where the     hackers play.

我想让它变成

代码语言:javascript
运行
复制
One OS to rule them all,
    One OS to find them.
    One OS to call them all,
    And in salvation bind them.
    In the bright land of Linux,
    Where the hackers play.

通过使用这个regex ([ ]* ){2,},我可以捕获两个或多个空白空间。这方面的问题是,它还捕获了第2-5行中的领先空格。

注意:,我想在https://www.jetbrains.com/help/idea/2016.1/regular-expression-syntax-reference.html中使用这个正则表达式。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-05 14:53:48

您可以使用这样的正则表达式:

代码语言:javascript
运行
复制
\b\s+\b

空间_替换

工作演示

IntelliJ更新:似乎不适用于IntelliJ,因此您可以尝试另一种解决方法:

代码语言:javascript
运行
复制
(\w+ )\s+

带替换字符串:$1

工作演示

当然,上面的regex会缩小场景范围,但是您可以尝试这样做。

票数 3
EN

Stack Overflow用户

发布于 2016-07-05 14:52:13

在您的示例中,您可以使用单词边界元字符:

代码语言:javascript
运行
复制
\b\s{2,}

这将匹配在单词末尾(或开头,但一个单词不能以空格开头)后面的任何大于2的空格。

但是,在更一般的情况下,它会失败,因为在特殊字符后面有多个空格,这不会被认为是单词的一部分。

如果您的语言支持无界宽度查找,则可以匹配以下内容:

代码语言:javascript
运行
复制
(?<!^\s*)\s{2,}
票数 2
EN

Stack Overflow用户

发布于 2016-07-05 15:25:08

有了对(*SKIP)(*FAIL)的支持,您还可以得到以下内容:

代码语言:javascript
运行
复制
^[ ]+(*SKIP)(*FAIL)  # match spaces at the beginning of a line
                     # these shall fail
|                    # OR
[ ]{2,}              # at least two spaces

请参阅regex101.com上的演示 (注意修饰符!)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38206425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档