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

去正则表达式查找带撇号的单词

去正则表达式查找带撇号的单词

Go
跃然一笑 2021-08-30 16:30:14
我试图在两个词之间找到一个子字符串,但我的起始词包含一个撇号,我似乎无法匹配它。例如,在下面这句话中bus driver drove steady although the bus's steering was going nuts.我的搜索的正确答案应该是:steering was going nuts并不是:driver ... nuts我试过这个re := regexp.MustCompile("(?s)bus[\\\'].*?nuts")我也试过这个:re := regexp.MustCompile("(?s)bus'.*?nuts")似乎无法让它发挥作用。
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

您可以使用字符串文字(带反引号)来包含单引号和捕获组:


re := regexp.MustCompile(`(?s)bus'.\s+(.*?nuts)`)

看这个例子:


var source_txt = `bus driver drove steady although the bus's steering was going nuts.`


func main() {

    fmt.Printf("Experiment with regular expressions.\n")

    fmt.Printf("source text:\n")

    fmt.Println("--------------------------------")

    fmt.Printf("%s\n", source_txt)

    fmt.Println("--------------------------------")


    // a regular expression

    regex := regexp.MustCompile(`(?s)bus'.\s+(.*?nuts)`)

    fmt.Printf("regex: '%v'\n", regex)

    matches := regex.FindStringSubmatch(source_txt)

    for i, v := range matches {

        fmt.Printf("match %2d: '%s'\n", i+1, v)

    }

}

输出:


Experiment with regular expressions.

source text:

--------------------------------

bus driver drove steady although the bus's steering was going nuts.

--------------------------------

regex: '(?s)bus'.\s+(.*?nuts)'

match  1: 'bus's steering was going nuts'

match  2: 'steering was going nuts'

的FindStringSubmatch():


识别 s 中正则表达式最左边的匹配项及其子表达式的匹配项(如果有)


这match[1]将是第一个捕获组。


查看完整回答
反对 回复 2021-08-30
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

我的搜索的正确答案应该是"steering was going nuts"......


如果您希望该子字符串作为您的匹配结果,您应该相应地调整您的正则表达式。


re := regexp.MustCompile("(?s)bus's (.*?nuts)")

rm := re.FindStringSubmatch(str)

if len(rm) != 0 {

  fmt.Printf("%q\n", rm[0]) // "bus's steering was going nuts"

  fmt.Printf("%q",   rm[1]) // "steering was going nuts"

}


查看完整回答
反对 回复 2021-08-30
  • 2 回答
  • 0 关注
  • 243 浏览
慕课专栏
更多

添加回答

举报

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