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

使用正则表达式匹配带有括号的标签

使用正则表达式匹配带有括号的标签

Go
慕尼黑8549860 2021-09-10 14:50:37
我想使用正则表达式包获取括号内所有标签的索引。str := "[tag=blue]Hello [tag2=red,tag3=blue]Good"rg := regexp.MustCompile(`(?:^|\W)\[([\w-]+)=([\w-]+)\]`)rgi := fmtRegex.FindAllStringIndex(str, -1)fmt.Println(rgi)// Want index for:// [tag=blue], [tag2=red,tag3=blue]正则表达式需要返回 [tag=blue], [tag2=red,tag3=blue] 的索引但它只返回[tag=blue].如何修复此正则表达式,(?:^|\W)\[([\w-]+)=([\w-]+)\]以便在括号中有多个标签时也可以匹配命令
查看完整描述

3 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

我想对@Avinash Raj 的答案发表评论,但我没有足够的 Repotation ......所以:

好像你想要这样的东西,

...

\B\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]

提供的正则表达式将仅匹配字符串中的第一对和最后一对 key=value。有类似的东西:

[tag=val,tag1=val1,tag2=val2,tag3=val3]

正则表达式将只匹配tagvaltag3val3。如果你想匹配所有这些,我建议使用没有正则表达式的纯 go。这是应该几乎直接前进的事情。

如果您实际上只需要匹配的索引,则可以使用上面的正则表达式,然后以其他方式解析标签。


查看完整回答
反对 回复 2021-09-10
?
慕少森

TA贡献2019条经验 获得超9个赞

golang正则表达式包接受的正确的正则表达式选择多个括号中的标签表达式是:

rg := regexp.MustCompile(`\[([\w-]+)=([\w-]+)(?:,([\w-]+)=([\w-]+))*\]`)


看,如果那是你要找的...

更新:刚刚意识到@ndyakov 已经回答了。


查看完整回答
反对 回复 2021-09-10
?
MM们

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

好像你想要这样的东西,

(?<!\w)\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]


或者

\B\[([\w-]+)=([\w-]+)(?:,[\w-]+=[\w-]+)*\]

\B 两个单词字符或两个非单词字符之间的匹配。


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

添加回答

举报

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