[英]My regular expression isn't returning what I need
我有一块文本。
google.sbox.p50 && google.sbox.p50([“如何”,[[“如何打平局”,0],[“如何训练你的龙2预告片”,0],[“怎么办杯歌“,0”,[“如何在3分钟内获得6包”,0],[“如何制作射击的纸枪”,0],[“如何基本”,0],[ “如何爱lil wayne”,0],[“如何像你最喜欢的艺术家一样唱歌”,0],[“如何成为一个令人伤心的码头和钻石”,0],[“如何在我的世界中驯服一匹马”,0]],{ “q”: “XJW - 0IKH6sqOp0ME-x5B7b_5wY”, “J”: “5”, “K”:1}])
使用\\\\[([^]]+)\\\\]
我能够得到我需要的一切,但有一点额外的我不需要。 我不需要["how to",[[
。 我只需要格式化的块,
["how to tie a tie",0]
有人可以帮我修改我的表达只能得到我需要的东西吗? 我已经工作了几个小时,我无法理解RegEx的想法。
将开始和结束方括号都放在否定字符类中?
\\[([^][]+)\\]
\\\\[
匹配文字[
\\\\]
匹配文字]
[^][]
是一个否定的类,例如匹配除][
之外的任何字符。 可能有点难以看到它,但它相当于[^\\\\]\\\\[]
。 这里不需要双重转义,因为你使用的是一个字符类(就像\\\\.
相当于[.]
)
([^][]+)
捕获方括号内的所有内容,确保没有]
或[
内部。
在C#中,您可以使用@
符号来避免每次都必须双重转义,并使用这个使得正则表达式如下:
var regex = new Regex(@"\[([^][]+)\]");
注意:此正则表达式将捕获方括号内的所有内容。 如果您希望特别获得格式["how to tie a tie",0]
,您可以更精确。 毕竟,正则表达式只匹配你匹配的东西:
var regex = new Regex(@"\["[^"]+",0\]");
在这里,我们有另一个否定的字符类: [^"]
。这将匹配任何不是引用字符的字符。
这假设数字始终为0
,如示例文本块中所示。 如果你有多种数字可能,你可以使用字符类[0-9]+
:
var regex = new Regex(@"\["[^"]+",[0-9]+\]");
您也可以使用\\d+
,但此字符类还匹配可能会或可能不会使正则表达式更糟的其他字符 。 如果您希望通过在字符之间允许可能的空格,制表符,换行符和换页符来更加谨慎,则可以使用此正则表达式:
var regex = new Regex(@"\[\s*"[^"]+"\s*,\s*[0-9]+\s*\]");
结论,可能有许多适合您需要的正则表达式,只需确保您知道数据是如何通过的,这样您就可以选择一个具有适当数量高速公路的数据。
我认为这正是你想要匹配的格式["how to tie a tie",0]
:
(\["[^"]+",\d\])
( )
- 围绕整个事情,所以这一切都被捕获在这个组中
\\["
- 找到["
[^"]+
- 找到一个或多个除"
",
- 找到",
\\d
- 找到一个数字,如果你想要的不仅仅是一个数字,请做\\d+
\\]
- 匹配结局]
这个正则表达式中唯一可变的东西是引号( [^"]+
)和数字( \\d+
)内的任何内容。
如果您不想要捕获组中的方括号,可以这样做:
\[("[^"]+",\d+)\]
我假设您不希望匹配,如果您的报价中有引号,因为它可能会破坏您使用它的任何目的,但如果您这样做,这应该工作:
\[("[^[\]]+",\d+)\]
我想你需要这个: (\\[[^\\[^]+?])
你做错了什么? (最小匹配)并排除任何[
或]
看似外括号中的文本是对象的JSON
表示。 我只是:而不是正则表达式:
google.sbox.p50 && google.sbox.p50(
东西( google.sbox.p50 && google.sbox.p50(
)加上去除尾随括号)
。 有更多的方法可以做到这一点,它可以比正则表达式更有效。 JSON
解析剩余的内部部分。 最后会话信息以及参数(在{}括号中),所以最后你最终可能会解析东西。 最好不要重新发明轮子( JSON
解析)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.