我想用正则表达式提取{}和""的相关字符
规则:
""只能在{}内有效,例如:32sf"sdc"sc 无效 , {"fdskj"} 有效
{}不能在""内,例如: {"sfd{xx{xx{xx}}x}dfs"} 在""内都无效 查询字符:
sdfk{111}kjfsx{"123"}kxf{"{234}"}sc"{294}"dfgd{"{3sf{dss}}"}
查询{}:{111}、{"123"}、{"{234}"}、{"{3sf{dss}}"}
查询"":123、{234}、{3sf{dss}}
谢谢!
规则:
""只能在{}内有效,例如:32sf"sdc"sc 无效 , {"fdskj"} 有效
{}不能在""内,例如: {"sfd{xx{xx{xx}}x}dfs"} 在""内都无效 查询字符:
sdfk{111}kjfsx{"123"}kxf{"{234}"}sc"{294}"dfgd{"{3sf{dss}}"}
查询{}:{111}、{"123"}、{"{234}"}、{"{3sf{dss}}"}
查询"":123、{234}、{3sf{dss}}
谢谢!
void Main()
{
string s=@"sdfk{111}kjfsx{""123""}kxf{""{234}""}sc""{294}""dfgd{""{3sf{dss}}""}"; foreach(Match m in Regex.Matches(s,@"{""(.*?)""}"))
{
Console.WriteLine(m.Groups[1].Value);
}
/*
123
{234}
{3sf{dss}}
*/
}
//查询{} 处理比较麻烦
void Main()
{
string s=@"sdfk{111}kjfsx{""123""}kxf{""{234}""}sc""{294}""dfgd{""{3sf{dss}}""}";
s=s.Replace("\"{","#").Replace("}\"","@");
foreach(Match m in Regex.Matches(s,@"{[\s\S]*?}"))
{
Console.WriteLine(m.Value.Replace("#","\"{").Replace("@","}\""));
}
}
Regex reg = new Regex(@"(?<!""){(?:""[^""]*""|[^{}])*}(?!"")");
MatchCollection mc = reg.Matches(test);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
/*-------输出---------
{111}
{"123"}
{"{234}"}
{"{3sf{dss}}"}
*/如果不满足要求,具体描述规则或给出能覆盖所有情况的例子