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

我试图在两个词之间找到一个子字符串,但我的起始词包含一个撇号,我似乎无法匹配它。

例如,在下面这句话中

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")

似乎无法让它发挥作用。


跃然一笑
浏览 247回答 2
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]将是第一个捕获组。

猛跑小猪

我的搜索的正确答案应该是"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"}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go