为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
尚方宝剑之说 2021-09-13 20:13:57
我是 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
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

您需要使用捕获组来捕获该句子的内容:


package main


import "fmt"

import "regexp"


func main() {


    str := `

* * *


Match this line

`   

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


    fmt.Println(r.FindStringSubmatch(str)[1])

}

输出:


Match this line

解释:


\* \* \*    Matches the first line containing the asterisks.

\n          A newline.

.*          Second line. Can be anything (Likely the line is simply empty)

\n          A newline

(           Start of capturing group

.*          The content of interest

)           End of capturing group

在评论中,您询问如何将第三行替换为<hr/>. 在这种情况下,我将使用两个捕获组 - 一个用于感兴趣线之前的部分,另一个用于线本身。在替换模式中,您可以使用$1结果中的第一个捕获组的值。


例子:


package main


import "fmt"

import "regexp"


func main() {


    str := `

* * * 


Match this line

`   

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


    str = string(r.ReplaceAll([]byte(str), []byte("$1<hr/>")))


    fmt.Println(str)

}


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信