我目前正在尝试对JSON字符串执行Regex Replace,如下所示:
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 \“:\”monkey \“,作为匹配并替换它。我想像对待字符串上的单个匹配一样替换match.Group[1]
。
在一天结束时,JSON字符串需要看起来像这样:
String input = "{\"`####`Answer_Options11\": \"CATS AND CAKE\",\"`####`Answer_Options\": \"CAKE WAS A LIE\",\"Answer_Options2\": \"not a monkey\"}";
知道怎么做吗?
答案 0 :(得分:2)
你想要一个积极的前瞻和积极的外观:
(?<=####.+?:).*?(?=,)
前瞻和后瞻将验证它是否与这些模式匹配,但不包括在匹配中。 This site很好地解释了这个概念。
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"
答案 1 :(得分:-1)
根据@Jonesy的回答,我得到了这个符合我想要的东西。它包括我需要的组的.Replace。前景和后方的负面看法非常有趣,但我需要替换其中一些价值观,因此需要进行分组。
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提供的巨大帮助。