golang regexp删除所有空白行

我想使用golangs regexp替换所有空白行和仅用空格/制表符填充的行。我以为下面的regexp应该可以解决问题, emptyLINE :=

regexp.MustCompile(^\s*$)

但令我惊讶的是,行首^和行尾$regexp标签不起作用。它们似乎表示整个字符串的开始/结束,而不仅仅是字符串中的一行,请参阅

https://play.golang.org/p/WZ4flVtDMN

我在这里想念什么吗?

编辑:

Wiktors的回答几乎使我到达了那里,但我仍然无法删除所有需要的行:https

//play.golang.org/p/1IpETpFKCU

回答:

您需要传递(?m)内联修饰符:

regexp.MustCompile(`(?m)^\s*$`) 

^^^^

在MULTILINE修改将使^匹配的起始 线

$与之匹配的结束

m 多行模式:^$匹配开始/结束线除了开始/结束文本(默认为false)

要记住的另一件事是\s匹配[\t\n\f\r ]符号。如果要匹配所有水平空白,可以使用[

\t][\t\p{Zs}]。这样一来,您就可以保持在边界内。

而另一件事:$只发出一个换行符后的位置,它不会消耗,所以,实际上你需要匹配\r\n\r\n$(如果你需要删除的换行符,太)。

这是我想出的(demo):

package main

import (

"fmt"

"regexp"

)

func main() {

re := regexp.MustCompile(`(?m)^\s*$[\r\n]*|[\r\n]+\s+\z`)

in := `

test

test

`

want_empty := ` test

test `

fmt.Printf("have [%v]\n", in)

fmt.Printf("want [%v]\n", want_empty)

fmt.Printf("got [%v]\n", re.ReplaceAllString(in, ""))

}

^\s*$[\r\n]*-一个行的开始相匹配,任何0+空格,资产的线(的端部$),然后匹配0+ LF / CR符号。

[\r\n]+\s+\z备选的匹配1个或多个CR或LF符号,1+空格然后字符串的明确的结束\z,如果没有它,^\s*$[\r\n]*将不匹配的最后一个空行。

以上是 golang regexp删除所有空白行 的全部内容, 来源链接: utcz.com/qa/412421.html

回到顶部