Golang正则表达式提取括号内的值并忽略任何中的内部括号

我有以下键=值对作为一行字符串的示例

start=("a", "b") and between=("range(2019, max, to=\"le\")") and end=("a", "b")

在 golang 中使用正则表达式我想提取 key=value 对,如下所示

  1. start=("a", "b")

  2. between=("range(2019, max, to=\"le\")")

  3. end=("a", "b")

stackoverflow 上有解决方案,但不适用于 golang 正则表达式。

有一个链接指向我失败的 golang 正则表达式尝试:regex101 golang风味

我将不胜感激任何帮助。


阿波罗的战车
浏览 141回答 0
0回答

MM们

问题是转义引号:\S+=(\([^(]*(?:[^("]*"(?:[^\\"]|\\["\\])*")(\)))https://regex101.com/r/3ytO9P/1我[^"]改为(?:[^\\"]|\\["\\]). 这使得正则表达式寻找常规字符或转义字符。通过匹配转义,它不允许\"结束比赛。不过你的正则表达式还有其他问题。这应该效果更好:\S+=(\([^("]*(?:[^("]*"(?:[^\\"]|\\["\\])*")*(\)))https://regex101.com/r/OuDvyX/1它会更改[^(]为[^("]以防止"匹配,除非它是完整字符串的一部分。更新:它仍然不支持其他转义序列。第一个[^("]*在当前模式中是多余的。它不会匹配between=("a",,,)但会匹配between=("a",,",")- 这是不一致的。正确的正则表达式将匹配有效的双引号字符串文字,以逗号和任意数量的空格分隔。恕我直言,这\S+=(\([^(]*(?:[^("]*"(?:[^\\"]|\\["\\])*")(\)))不是正确的模式如果您确实希望正则表达式如此强大,您应该使用解析器,但您可以通过使用以下方法来解决这些问题:\S+=(\((?:[^("]*"(?:[^\\"]|\\.)*"[^("]*)*(\)))
打开App,查看更多内容
随时随地看视频慕课网APP