猿问

Go regexp:在出现后查找下一项

我是 Go 初学者,我一直在玩正则表达式。例子:


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

r2 := r.ReplaceAll(b, []byte("<hr>"))

(将所有* * *s替换为<hr>s)


我不知道该怎么做的一件事是在出现后找到该next项目。在 JavaScript/jQuery 中,我曾经这样做过:


$("#input-content p:has(br)").next('p').doStuff()

(在里面有标签的标签p tag之后找到下一个)。pbr


在 Go 中完成相同任务的最简单方法是什么?说,在* * *?之后找到下一行?


* * *


Match this line


尚方宝剑之说
浏览 203回答 1
1回答

RISEBY

您需要使用捕获组来捕获该句子的内容:package mainimport "fmt"import "regexp"func main() {&nbsp; &nbsp; str := `* * *Match this line`&nbsp; &nbsp;&nbsp; &nbsp; r, _ := regexp.Compile(`\* \* \*\n.*\n(.*)`)&nbsp; &nbsp; fmt.Println(r.FindStringSubmatch(str)[1])}输出:Match this line解释:\* \* \*&nbsp; &nbsp; Matches the first line containing the asterisks.\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; A newline..*&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Second line. Can be anything (Likely the line is simply empty)\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; A newline(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Start of capturing group.*&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; The content of interest)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End of capturing group在评论中,您询问如何将第三行替换为<hr/>. 在这种情况下,我将使用两个捕获组 - 一个用于感兴趣线之前的部分,另一个用于线本身。在替换模式中,您可以使用$1结果中的第一个捕获组的值。例子:package mainimport "fmt"import "regexp"func main() {&nbsp; &nbsp; str := `* * *&nbsp;Match this line`&nbsp; &nbsp;&nbsp; &nbsp; r, _ := regexp.Compile(`(\* \* \*\n.*\n)(.*)`)&nbsp; &nbsp; str = string(r.ReplaceAll([]byte(str), []byte("$1<hr/>")))&nbsp; &nbsp; fmt.Println(str)}
随时随地看视频慕课网APP

相关分类

Go
我要回答