捕获第二个引用的字符串,不带尾随引号/分隔符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了捕获第二个引用的字符串,不带尾随引号/分隔符相关的知识,希望对你有一定的参考价值。
这里有一个新的正则表达式学习器,我有一个字符串可靠地用冒号分隔两个带引号的字符串,如:
"foo": "bar"
我试图在没有引号的情况下提取"bar"
我想出来了:
:([^"]*"){2}
这给了我:bar"
在第二场比赛,但我正在努力找出一种方法来消除尾随的引用。
很感谢任何形式的帮助!
答案
您可以使用预测来验证后面的双引号也是输入中的最后一个字符:
另一答案
您最好的方法取决于您正在使用的正则表达式的风格。有一些技巧可以让你只匹配你想要的作品。
也就是说,这个正则表达式只匹配捕获组中的第二个引用字符串:
"[^"]+"s*:s*"([^"]+)(?=")
如果你确定你没有任何其他类型的字符串,并且该字符串将在最终引号后立即终止,那么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*"([^"]+)(?=")
然后根据您的选择编程获得所需的组
以上是关于捕获第二个引用的字符串,不带尾随引号/分隔符的主要内容,如果未能解决你的问题,请参考以下文章