用括号外的逗号标记

时间:2018-02-28 15:57:45

标签: regex go

我正在拼命尝试将具有以下格式的过滤字符串标记:

price:gte:5.99,price:lte:10.00,model:in:[test1,test2]

缺陷是逗号不仅用于分隔过滤器选项,还用作选项列表的分隔符:[test1,test2]

应用标准正则表达式标记化表达式[^,]+可以得到:

price:gte:5.99
price:lte:10.00
model:in:[test1
test2]

但是,显然,我想:

price:gte:5.99
price:lte:10.00
model:in:[test1,test2]

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

golang regex不支持前瞻性断言,这使得这项任务更加困难。

您可以使用此替换使用此正则表达式:

[^][,]*(?:\[[^][]*\])+|[^,]+

RegEx Demo

<强>详细信息:

  • [^][,]+:匹配1 +个不是,[以及]
  • 的字符
  • (?:\[[^][]*\])+:在[]之间匹配文字。匹配此组中的1个或更多
  • |:或
  • [^,]+:匹配1个不是逗号的字符

答案 1 :(得分:1)

这可能是一个选项:

(?:[^][,\n]+\[[^]]+\]|[^,\n]+)

<强>解释

(?:                  # Non capturing group
  [^][,\n]+\[[^]]+\] # Match not a comma newline ] or [, then match between []
  |                  # Or
  [^,\n]+            # Match not a comma or a newline
)                    # Close non capturing group

修改 正如@anubhava所建议的那样,将][添加到字符类中,以便它变为[^][,\n]以防止不必要的回溯。