duan0065626385 2015-03-03 08:31
浏览 32
已采纳

在Go中匹配段落

I'm a Go beginner. I'm trying to match paragraphs with regexp:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := `first paragraph

second paragraph

third paragraph`

    r, _ := regexp.Compile(`(.+)(

)`)

    fmt.Println(r.FindAllString(str, -1))
}

The output is this:

[first paragraph

 second paragraph

]

I think it's matching the empty lines also. I only want to match the paragraphs (first paragraph, second paragraph).

How to modify my code to accomplish that?

  • 写回答

1条回答 默认 最新

  • douji1999 2015-03-03 09:55
    关注

    You can try, using a re2-compliant regexp, (?s).*?( |$) (see playground example):

    package main
    
    import (
        "fmt"
        "regexp"
    )
    
    func main() {
        str := `first paragraph
    second line of first paragraph
    
    second paragraph
    
    third paragraph
    second line of third paragraph`
    
        r, _ := regexp.Compile(`(?s).*?(
    
    |$)`)
    
        res := r.FindAllString(str, -1)
        fmt.Printf("%+v %d", res, len(res))
    }
    

    That would output:

    [first paragraph
    second line of first paragraph
    
     second paragraph
    
     third paragraph
    second line of third paragraph] 3
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应