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 mainimport (
"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