我有一段文字。
google.sbox.p50&& google.sbox.p50([“怎么样”,[[如何打领带“,0],[”如何训练你的龙2预告片“,0],[”如何做杯歌“,0 ],[“如何在3分钟内获得六包装”,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的想法。
答案 0 :(得分:3)
将开始和结束方括号都放在否定的字符类中?
\\[([^][]+)\\]
\\[
匹配文字[
\\]
匹配文字]
[^][]
是一个否定类,例如匹配除][
之外的任何字符。可能有点难以看到它,但它相当于[^\\]\\[]
。这里不需要双重转义,因为您使用的是字符类(就像\\.
相当于[.]
)
([^][]+)
捕获方括号内的所有内容,确保内部没有]
或[
。
在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+
,但此角色类也匹配other characters,这可能会或可能不会使正则表达式更糟。如果您希望通过在字符之间允许可能的空格,制表符,换行符和换页符来更加谨慎,则可以使用此正则表达式:
var regex = new Regex(@"\[\s*"[^"]+"\s*,\s*[0-9]+\s*\]");
结论,可能有许多适合您需要的正则表达式,只需确保您知道数据是如何通过的,这样您就可以选择一个具有适当数量高速公路的正则数据。
答案 1 :(得分:1)
我认为这正是您希望匹配["how to tie a tie",0]
的格式:
(\["[^"]+",\d\])
( )
- 围绕整个事情,所以这一切都被捕获在这个组中
\["
- 找到["
[^"]+
- 查找除"
之外的任何内容
",
- 找到",
\d
- 找到一个数字,如果您想要的不仅仅是一个数字,请执行\d+
\]
- 匹配结尾]
此正则表达式中唯一可变的内容是引号([^"]+
)和数字(\d+
)内的任何内容。
如果你不想在捕获组中使用方括号,你可以这样做:
\[("[^"]+",\d+)\]
我假设您不想匹配,如果您的报价中有引号,因为它可能会破坏您使用它的任何目的,但如果您这样做,这应该有效:
\[("[^[\]]+",\d+)\]
答案 2 :(得分:0)
答案 3 :(得分:0)
我认为你需要这个:(\[[^\[^]+?])
你做错了什么? (最小匹配)并排除任何[
或]
答案 4 :(得分:0)
看似外括号中的文本是对象的JSON
表示。而不是正则表达式,我只是:
google.sbox.p50 && google.sbox.p50(
)之前剥去东西,然后剥去尾随支架)
。有更多的方法可以做到这一点,它可以比正则表达式更有效。JSON
解析剩余的内部部分。最后会话信息以及参数(在{}括号中),所以最后你最终可能会解析东西。最好不要重新发明轮子(JSON
解析)。