我的正则表达式没有返回我需要的东西

时间:2013-08-29 19:13:17

标签: c# regex

我有一段文字。

  

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的想法。

5 个答案:

答案 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+)内的任何内容。

Demo

如果你不想在捕获组中使用方括号,你可以这样做:

\[("[^"]+",\d+)\]

我假设您不想匹配,如果您的报价中有引号,因为它可能会破坏您使用它的任何目的,但如果您这样做,这应该有效:

\[("[^[\]]+",\d+)\]

答案 2 :(得分:0)

您必须使用此模式

@"\[[^][]+\]"

有关方括号here的更多信息。

答案 3 :(得分:0)

我认为你需要这个:(\[[^\[^]+?])

你做错了什么? (最小匹配)并排除任何[]

答案 4 :(得分:0)

看似外括号中的文本是对象的JSON表示。而不是正则表达式,我只是:

  1. 在支架+第一个支架(google.sbox.p50 && google.sbox.p50()之前剥去东西,然后剥去尾随支架)。有更多的方法可以做到这一点,它可以比正则表达式更有效。
  2. JSON解析剩余的内部部分。
  3. 从那时起你就拥有了对象表示,你可以省去你不需要的数组的第一个元素,而且你还可以以可遍历的形式获得其他所有元素。
  4. 最后会话信息以及参数(在{}括号中),所以最后你最终可能会解析东西。最好不要重新发明轮子(JSON解析)。