使用正则表达式从字符串中获取两个[]之间的值
本文关键字:两个 之间 正则表达式 字符串 获取 | 更新日期: 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上查看
[^'[']]*
是一个否定的字符类,表示匹配除[
和]
以外的任何字符。使用此结构,您不需要?
来使*
不贪婪。