您需要传递
(?m)内联修饰符:
regexp.MustCompile(`(?m)^s*$`) ^^^^
在MULTILINE修改将使
^匹配的起始 线
和
$与之匹配的结束 行 :
m多行模式:^和$匹配开始/结束线除了开始/结束文本(默认为false)
要记住的另一件事是
s匹配
[tnfr ]符号。如果要匹配所有水平空白,可以使用
[t]或
[tp{Zs}]。这样一来,您就可以保持在边界内。而另一件事:
$只发出一个换行符后的位置,它不会消耗,所以,实际上你需要匹配
r或
n或
rn后
$(如果你需要删除的换行符,太)。
这是我想出的(demo):
package mainimport ( "fmt" "regexp")func main() { re := regexp.MustCompile(`(?m)^s*$[rn]*|[rn]+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*$[rn]*-一个行的开始相匹配,任何0+空格,资产的线(的端部
$),然后匹配0+ LF / CR符号。
在
[rn]+s+z备选的匹配1个或多个CR或LF符号,1+空格然后字符串的明确的结束
z,如果没有它,
^s*$[rn]*将不匹配的最后一个空行。



