正则表达式替换在 JSON 结构上
本文关键字:结构上 JSON 替换 正则表达式 | 更新日期: 2023-09-27 18:36:33
我目前正在尝试对如下所示的 JSON 字符串进行正则表达式替换:
String input = "{'"`####`Answer_Options11'": '"monkey22'",'"`####`Answer_Options'": '"monkey'",'"Answer_Options2'": '"not a monkey'"}";
一个目标是查找并替换所有关键字段以"####"开头的值字段
我目前有这个:
static Regex _FieldRegex = new Regex(@"`####`'w+" + ".:.'"(.*)'",");
static public string MatchKey(string input)
{
MatchCollection match = _encryptedFieldRegex.Matches(input.ToLower());
string match2 = "";
foreach (Match k in match )
{
foreach (Capture cap in k.Captures)
{
Console.WriteLine("" + cap.Value);
match2 = Regex.Replace(input.ToLower(), cap.Value.ToString(), @"CAKE");
}
}
return match2.ToString();
}
现在这不起作用。当然,我猜,因为它将整个"####"Answer_Options11''":''"monkey22''","####'Answer_Options''":''"猴子"作为匹配并替换它。我想像替换字符串上的单个匹配项一样替换match.Group[1]
。
归根结底,JSON 字符串需要如下所示:
String input = "{'"`####`Answer_Options11'": '"CATS AND CAKE'",'"`####`Answer_Options'": '"CAKE WAS A LIE'",'"Answer_Options2'": '"not a monkey'"}";
知道怎么做吗?
你想要一个积极的前瞻和一个积极的后视:
(?<=####.+?:).*?(?=,)
前瞻和后瞻将验证它是否与这些模式匹配,但不将它们包含在匹配中。这个网站很好地解释了这个概念。
从 RegexHero.com 生成的代码:
string strRegex = @"(?<=####.+?:).*?(?=,)";
Regex myRegex = new Regex(strRegex);
string strTargetString = @" ""{'""`####`Answer_Options11'"": '""monkey22'"",'""`####`Answer_Options'"": '""monkey'"",'""Answer_Options2'"": '""not a monkey'""}""";
foreach (Match myMatch in myRegex.Matches(strTargetString))
{
if (myMatch.Success)
{
// Add your code here
}
}
这将匹配"monkey22"
和"monkey"
,但不是"not a monkey"
从@Jonesy的答案出发,我得到了这个适合我想要的东西。它包括 .替换我需要的组。前视和后视非常有趣,但我需要替换其中一些值,因此组。
static public string MatchKey(string input)
{
string strRegex = @"(__u__)(.+?:'s*)""(.*)""(,|})*";
Regex myRegex = new Regex(strRegex, RegexOptions.IgnoreCase | RegexOptions.Multiline);
IQS_Encryption.Encryption enc = new Encryption();
int count = 1;
string addedJson = "";
int matchCount = 0;
foreach (Match myMatch in myRegex.Matches(input))
{
if (myMatch.Success)
{
//Console.WriteLine("REGEX MYMATCH: " + myMatch.Value);
input = input.Replace(myMatch.Value, "__e__" + myMatch.Groups[2].Value + "'"c" + count + "'"" + myMatch.Groups[4].Value);
addedJson += "c"+count + "{" +enc.EncryptString(myMatch.Groups[3].Value, Encoding.UTF8.GetBytes("12345678912365478912365478965412"))+"},";
}
count++;
matchCount++;
}
Console.WriteLine("MAC" + matchCount);
return input + addedJson;
}`
再次感谢@Jonesy的巨大帮助。