我有内容我想从字符串中删除
s:=`Hello! <something>My friend</something>this is some <b>content</b>.`
我希望能够替换<b>content</b>
和<something>My friend</something>
,以便字符串
`Hello! this is some .`
基本上,我希望能够删除<.*>
但问题是正则表达式与<something>My friend</something> this is some <b>content</b>
匹配,因为golang匹配第一个<
到最后一个>
答案 0 :(得分:2)
Go的regexp没有回溯,所以你不能像在perl中那样使用<(.*?)>.*?</\1>
。
但是,如果您不关心结束标记是否匹配,则可以使用:
<.*?/.*?>
刚刚看到你的更新,.*
是一个贪婪的运算符,它将匹配其间的所有内容,你必须使用非贪婪匹配(又名.*?
)。
答案 1 :(得分:2)
*
是greedy运算符,意味着它将尽可能多地匹配,并且仍然允许正则表达式的其余部分匹配。在这种情况下,我建议使用否定的字符类,因为不支持反向引用。
s := "Hello! <something>My friend</something>this is some <b>content</b>."
re := regexp.MustCompile("<[^/]*/[^>]*>")
fmt.Println(re.ReplaceAllString(s, ""))