2015-03-03 2 views
1

Я начинаю. Я пытаюсь соответствовать абзацы 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? –

+0

@ ʰᵈˑ Да, я только что понял эту проблему. Теперь нет необходимости. Я узнаю об этом позже. – alexchenco

+1

Есть ли регулярное выражение? Кажется, излишне ... –

ответ

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 
Смежные вопросы