使用正则表达式从字符串中获取两个[]之间的值

时间:2011-08-17 09:10:36

标签: c# .net regex

我有一个像folows一样的字符串:

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

我想提取角括号中的每个字符串,例如131357130026.879846true

通过正则表达式。

我尝试过使用

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

但是第一个字符串为[[1313571420,26.901025,true] 即有一个额外的角撑。

请帮助我如何实现这一目标。

3 个答案:

答案 0 :(得分:1)

对我来说,这似乎适用于Expresso:

\[([\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);
}

答案 1 :(得分:0)

试试这个:

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

“[^]] +” - 表示除右方括号外的任何字符

答案 2 :(得分:0)

试试这个

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

在此处查看online on Regexr

[^\[\]]*是一个否定的字符类,表示匹配除[]之外的任何字符。使用此构造,您不需要?即可使*无效。