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

本文关键字:两个 之间 正则表达式 字符串 获取 | 更新日期: 2023-09-27 18:05:44

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

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

我想在角括号中提取每个字符串,如1313571300, 26.879846, true

通过正则表达式。

我试过使用

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

,但这将第一个字符串作为[[1313571420,26.901025,true]也就是加一个角括号。

请告诉我如何才能做到这一点

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

这似乎在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);
}

试试这个:

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

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

试试这个

'[([^'[']]*)']

在Regexr上查看

[^'[']]*是一个否定的字符类,表示匹配除[]以外的任何字符。使用此结构,您不需要?来使*不贪婪。