捕获第二个引用的字符串,不带尾随引号/分隔符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了捕获第二个引用的字符串,不带尾随引号/分隔符相关的知识,希望对你有一定的参考价值。

这里有一个新的正则表达式学习器,我有一个字符串可靠地用冒号分隔两个带引号的字符串,如:

"foo": "bar"

我试图在没有引号的情况下提取"bar"

我想出来了:

:([^"]*"){2}

这给了我:bar"在第二场比赛,但我正在努力找出一种方法来消除尾随的引用。

很感谢任何形式的帮助!

答案

您可以使用预测来验证后面的双引号也是输入中的最后一个字符:

[^"]*(?="$)

另一答案

您最好的方法取决于您正在使用的正则表达式的风格。有一些技巧可以让你只匹配你想要的作品。

也就是说,这个正则表达式只匹配捕获组中的第二个引用字符串:

"[^"]+"s*:s*"([^"]+)(?=")

Demo

如果你确定你没有任何其他类型的字符串,并且该字符串将在最终引号后立即终止,那么trincot's answer更简单,更好。

另一答案

看一下这个

echo '"foo":"bar"' | awk -F':' '{gsub(/"/, "", $2); print $2}'
另一答案

我发现使用K (Keep text out of the regex match)很容易记住这种模式:

s"K.+(?=")

它可以理解为:

  • 忽略空间前面的所有内容和“s"K(删除"foo": "
  • 然后得到一切,直到第一个"找到.+(?="),所以ti将返回只是bar

这种方法的问题在于,如果你有更大的东西,你总是需要具有相同的输入/模式的项目,例如:

"bla": "foo": "bar"

将返回:

foo": "bar

@trincot回答[^"]*(?="$)保证总是得到""中的最后一项,所以你可以有"bla": "foo": "bar"并且总是得到bar

@ ed-cottrell回答qazxsw poi无论长度如何都会获得第二名

但是,要获得可以使用的组:

"[^"]+"s*:s*"([^"]+)(?=")

然后根据您的选择编程获得所需的组

以上是关于捕获第二个引用的字符串,不带尾随引号/分隔符的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot - Json RequestBody,带/不带引号的字符串/枚举

以逗号分隔的字符串查找目录列表,不带尾随逗号

使用不带引号的python csv writer

Oracle单引号问题

shell part2

使用 SSIS OR T-SQL 将一列带引号和不带引号的逗号分隔值拆分为多列