2015-03-03 88 views
1

我是Go初学者。我试图用regexp匹配的段落:在Go中匹配段落

package main 

import (
    "fmt" 
    "regexp" 
) 

func main() { 
    str := `first paragraph 

second paragraph 

third paragraph` 

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

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

输出是这样的:

[first paragraph 

second paragraph 

] 

我认为它也匹配空行。我只想匹配段落(first paragraph,second paragraph)。

如何修改我的代码来完成该操作?

+0

你需要匹配'第三paragraph'吗?或者只是第一个2? – 2015-03-03 08:41:47

+0

@ʰᵈˑ是的,我刚刚意识到这个问题。现在不需要。我会在稍后解决。 – alexchenco 2015-03-03 09:01:48

+1

是否是正则表达式的一个要求?看起来过度... – 2015-03-03 09:16:27

回答

1

你可以试试,用re2-compliant regexp(?s).*?(\n\n|$)(见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).*?(\n\n|$)`) 

    res := r.FindAllString(str, -1) 
    fmt.Printf("%+v %d", res, len(res)) 
} 

这将输出:

[first paragraph 
second line of first paragraph 

second paragraph 

third paragraph 
second line of third paragraph] 3