2011-08-17 29 views
0

我有一个字符串等作为folows:抓取值

"channel_changes":[[1313571300,26.879846,true],[1313571360,26.901025,true]] 

我想提取每串中的角撑等131357130026.879846true

通过正则表达式。

我一直在使用

string regexPattern = @"\[(.*?)\]"; 

试过但给人的第一字符串作为[[1313571420,26.901025,true] 即有一个额外的角撑。

请帮我一下,我怎么做到这一点。

回答

1

这似乎快报工作对我来说:

\[([\w,\.]*?)\] 

文字[
[1]:带编号的捕获组。 [\ W,] *?]
- 在这个类的任何字符:[\ W,...],任何重复次数,尽可能少
文字]

的问题似乎是“。”在你的正则表达式中 - 因为它正在拾取第一个文字“[”,并且在你的输入中考虑下面的“[”作为下一个字符有效。

我将它限制为仅包含字母数字字符,逗号和文字句号(句号),因为这就是您示例中的所有内容。你可以走得更远,真正指定这些内方括号内的数据的格式假设它的一致,并与更多的东西像这样结束:

\[[0-9.]+,[0-9.]+,(true|false)\] 

实例C#代码:

var matches = Regex.Matches("\"channel_changes\":[[1313571300,26.879846,true],[1313571360,26.901025,true]]", @"\[([\w,\.]*?)\]"); 

foreach (var match in matches) 
{ 
    Console.WriteLine(match); 
} 
+0

在.NET中,它返回5场比赛,其中三是逗号符号“”和第五是‘]’ – sll

+0

在.net – CuriousBuddy

+0

不工作工程在PowerShell中,不知道为什么不.NET? '[regex] :: matches(''channel_changes':[[1313571300,26.879846,true],[1313571360,26.901025,true]]','\ [([\ w,\。] *?)\]') ' –

0

尝试:

@"\[+([^\]]+)\]+" 

“[^]] +” - 这意味着除了右方括号

012的任何字符
0

试试这个

\[([^\[\]]*)\] 

见这里online on Regexr

[^\[\]]*是一个否定的字符类,意味着匹配任何字符,但[]。有了这个构造,你不需要?就可以让你的*不合理。