正则表达式将多个空格替换为单个空格,不包括前导空格

时间:2016-07-05 14:45:58

标签: regex intellij-idea

我正在尝试编写一个正则表达式,它将捕获两个或更多空格排除前导空格。我们来看下面的例子

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.

我希望它成为

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.

通过使用此正则表达式([ ]* ){2,},我可以捕获两个或更多空格。这个问题是它还捕获了第2 - 5行的前导空格。

注意: 我想在 Intellij IDEA 中使用此正则表达式。

3 个答案:

答案 0 :(得分:2)

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

\b\s{2,}

这将匹配单词末尾(或开头,但单词不能以空格开头)后任意数量的大于2的空格。

但是,在更常见的情况下,如果你可以在一个特殊字符后面有多个空格,这将不会被视为一个单词的一部分。

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

(?<!^\s*)\s{2,}

答案 1 :(得分:2)

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

\b\s+\b

使用空格_替换

<强> Working demo

enter image description here

IntelliJ的更新:似乎看起来没有使用IntelliJ,因此您可以尝试使用其他解决方法:

(\w+ )\s+

使用替换字符串:$1

<强> Working demo

当然,上面的正则表达式会缩小场景,但你可以试试。

答案 2 :(得分:2)

支持(*SKIP)(*FAIL),你也可以提出:

^[ ]+(*SKIP)(*FAIL)  # match spaces at the beginning of a line
                     # these shall fail
|                    # OR
[ ]{2,}              # at least two spaces

请参阅a demo on regex101.com(请注意修饰符!)。