我有以下键=值对示例作为一行字符串
start=("a", "b") and between=("range(2019, max, to=\"le\")") and end=("a", "b")
在 golang 中使用正则表达式我想提取 key=value 对,如下所示
start=("a", "b")between=("range(2019, max, to=\"le\")")end=("a", "b")stackoverflow 上有解决方案,但不适用于 golang regex。
有一个链接指向我使用 golang regex 的失败尝试:regex101 golang flavor
我将不胜感激任何帮助。
问题是转义引号:
\n\n\\S+=(\\([^(]*(?:[^("]*"(?:[^\\\\"]|\\\\["\\\\])*")(\\)))\nRun Code Online (Sandbox Code Playgroud)\n\nhttps://regex101.com/r/3ytO9P/1
\n\n我[^"]改为(?:[^\\\\"]|\\\\["\\\\]). 这使得正则表达式寻找常规字符或转义字符。通过匹配转义,\xe2\x80\x99 不允许\\"结束匹配。
不过你的正则表达式还有其他问题。这应该效果更好:
\n\n\\S+=(\\([^("]*(?:[^("]*"(?:[^\\\\"]|\\\\["\\\\])*")*(\\)))\nRun Code Online (Sandbox Code Playgroud)\n\nhttps://regex101.com/r/OuDvyX/1
\n\n它会更改[^(]为[^("]以防止"匹配,除非它\xe2\x80\x99s 是完整字符串的一部分。
更新:
\n\n\n\n\n\n\n它仍然不支持其他转义序列。第一个
\n[^("]*在当前模式中是多余的。它不会匹配between=("a",,,)但会匹配between=("a",,",")- 这是不一致的。正确的正则表达式将匹配有效的双引号字符串文字,以逗号和任意数量的空格分隔。恕我直言,这\\S+=(\\([^(]*(?:[^("]*"(?:[^\\\\"]|\\\\["\\\\])*")(\\)))不是正确的模式
如果您确实希望正则表达式如此强大,您应该使用解析器,但您可以通过使用以下方法来解决这些问题:
\n\n\\S+=(\\((?:[^("]*"(?:[^\\\\"]|\\\\.)*"[^("]*)*(\\)))\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |