繁体   English   中英

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

[英]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表示。 我只是:而不是正则表达式:

  1. 在括号+第一个括号之前google.sbox.p50 && google.sbox.p50(东西( google.sbox.p50 && google.sbox.p50( )加上去除尾随括号) 有更多的方法可以做到这一点,它可以比正则表达式更有效。
  2. JSON解析剩余的内部部分。
  3. 从那时起你就拥有了对象表示,你可以省去你不需要的数组的第一个元素,而且你可以以可遍历的形式获得其他所有元素。

最后会话信息以及参数(在{}括号中),所以最后你最终可能会解析东西。 最好不要重新发明轮子( JSON解析)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM