regex - golang正则表达式删除所有空白行

标签 regex go

我想使用 golangs regexp 替换所有空白行和仅用空格/制表符填充的行。我认为下面的正则表达式应该可以解决问题, 空行 := regexp.MustCompile(`^\s*$`) 但令人惊讶的是,行首 ^ 和行尾 $ 正则表达式标记不起作用。它们似乎表示整个字符串的开始/结束,而不仅仅是字符串中的一行,请参阅

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

我在这里遗漏了什么吗?

编辑:

Wiktors 的回答几乎让我到达那里,但我仍然无法删除所有想要的行: https://play.golang.org/p/1IpETpFKCU

最佳答案

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

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

MULTILINE modifier将使 ^ 匹配的开头,$ 将匹配的结尾:

m        multi-line mode: ^ and $ match begin/end line in addition to begin/end text (default 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+ 空格、 Assets 行的结尾 ($) 然后匹配 0+ LF/CR 符号。

[\r\n]+\s+\z 替代项匹配 1 个或多个 CR 或 LF 符号、1 个以上空格以及字符串 \z 的明确结尾>,没有它,^\s*$[\r\n]* 将不会匹配最后一个空行。

关于regex - golang正则表达式删除所有空白行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40032254/

相关文章:

xml - 只定义一个结构并让它在 Go 中处理 XML 文件的所有内部元素?

c# - 删除第一个字母后的所有内容

Bash 脚本中的正则表达式

python - 将 re 中的 € 符号与 python 匹配

go - 单例 http 客户端

gorilla/mux golang 缓存静态文件

python - 匹配正则表达式中的连续数字,同时忽略 python3 中的破折号

javascript - 使用区分大小写字符的正则表达式拆分字符串上的名称

macos - 去安装不使用 zsh

Golang update pass by reference 值