Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用字符串替换原始json中的长整数_C#_Regex_Json - Fatal编程技术网

C# 用字符串替换原始json中的长整数

C# 用字符串替换原始json中的长整数,c#,regex,json,C#,Regex,Json,我正在寻找一种方法,将所有长度超过17位的整数用引号括在json格式的字符串中(本质上是在反序列化时使它们成为字符串) 有人在Javascript中面临同样的问题发布在这里 我怀疑有一种方法可以在这里使用Regex.Replace(),但是理解两种语言之间的语法和Regex的需要让我有点不知所措 到目前为止,我已经: string pattern = @"/:\s*(\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d+)\s*([,\}])/g";

我正在寻找一种方法,将所有长度超过17位的整数用引号括在json格式的字符串中(本质上是在反序列化时使它们成为字符串)

有人在Javascript中面临同样的问题发布在这里

我怀疑有一种方法可以在这里使用Regex.Replace(),但是理解两种语言之间的语法和Regex的需要让我有点不知所措

到目前为止,我已经:

        string pattern =  @"/:\s*(\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d+)\s*([,\}])/g";
        content = Regex.Replace(content,pattern, @":""{1}""{2}");
将长度超过17位的所有整数以json格式的字符串括在引号中

我将使用以下方法:

string pattern =  "[^\"\\d](\\d{17,})[^\"\\d]";
content = Regex.Replace(content,pattern, "\"$1\"");
第一行选择17位或更大的所有数值(并确保它们不是字符串)。 第二行将这17位数字用双引号括起来

如果JSON被缩小,它会稍微改变正则表达式。我们可以使用,这将确保生成的JSON仍然有效

string pattern =  ":(\\d{17,})";
content = Regex.Replace(content,pattern, "\"$1\"");
将长度超过17位的所有整数以json格式的字符串括在引号中

我将使用以下方法:

string pattern =  "[^\"\\d](\\d{17,})[^\"\\d]";
content = Regex.Replace(content,pattern, "\"$1\"");
第一行选择17位或更大的所有数值(并确保它们不是字符串)。 第二行将这17位数字用双引号括起来

如果JSON被缩小,它会稍微改变正则表达式。我们可以使用,这将确保生成的JSON仍然有效

string pattern =  ":(\\d{17,})";
content = Regex.Replace(content,pattern, "\"$1\"");

零宽度负lookahead/lookahead()是您应该用来确保在开始或结束处没有引号的。这样,在进行替换时,您就不需要知道确切的JSON格式:

string pattern = @"(?<![""\w])(\d{17,})(?![""\w])";
string content = Regex.Replace(content, pattern, "\"$1\"");

string pattern=@”(?Zero-width-negative-lookahead/lookahead())是用来确保在开始或结束处没有引号的方法。这样,在进行替换时,您就不需要知道确切的JSON格式:

string pattern = @"(?<![""\w])(\d{17,})(?![""\w])";
string content = Regex.Replace(content, pattern, "\"$1\"");

string-pattern=@”(?我不得不将示例中的一些转义引号重新调整为以下内容:
string-pattern=@“[^”“\d](\d{17,})[^”“\d];content=Regex.Replace(content,pattern,@“$1”);
但它似乎会在任意一侧替换一个字符(在本例中,它会删除一个:和,因为json没有空格).你知道这是原来的正则表达式还是我在替换中添加了双引号而改变了什么吗?我的错误-被删除的字符是你的正则表达式的简化版本(任何17位以上的数字)我正在使用,因为原始数据与任何值都不匹配,我希望看到它匹配。我将添加一些示例数据,以说明我使用您的示例数据的问题,下面是一个it匹配的示例:对于.net,我将删除字符串前面的
@
符号,并仅使用上一次更新的答案中的双反引号。Fantastic,我用各种转义字符迷惑了自己——删除了@works。我现在得到的输出是
{“blingCompoundKey”:{“id”4510887396879241701“dateTime”:143408734451},
。我认为在两边各寻找1个字符的可能引号的正则表达式参数也被算作替换目标的一部分。但是,如果没有这些参数,它也可以工作-我可能不得不满足于现在对已经被引用的长整数不敏感。好吧,看起来您正在处理缩小的JSON(键/值之间没有空格)。在这种情况下,模式可能类似于:(\\d{17,})
我必须将示例中的一些转义引号重新调整为以下内容:
字符串模式=@“[^”“\d](\d{17,})[^”“\d];“content=Regex.Replace(content,pattern,@“$1”);
,但它似乎在两侧都替换了一个字符(在本例中,它删除了a:和,因为json没有空格)。知道这是原始正则表达式还是我在替换中添加了双引号的内容吗?我的错误-被删除的字符是正则表达式的简化版本(任何17位以上的数字)我正在使用,因为原始数据与任何值都不匹配,我希望看到它匹配。我将添加一些示例数据,以说明我使用您的示例数据的问题,下面是一个it匹配的示例:对于.net,我将删除字符串前面的
@
符号,并仅使用上一次更新的答案中的双反引号。Fantastic,我用各种转义字符迷惑了自己——删除了@works。我现在得到的输出是
{“blingCompoundKey”:{“id”4510887396879241701“dateTime”:143408734451},
。我认为在两边各寻找1个字符的可能引号的正则表达式参数也被算作替换目标的一部分。但是,如果没有这些参数,它也可以工作-我可能不得不满足于现在对已经被引用的长整数不敏感。好吧,看起来您正在处理缩小的JSON(键/值之间没有空格)。在这种情况下,模式可能类似于:(\\d{17,})
我必须将示例中的一些转义引号重新调整为以下内容:
字符串模式=@“[^”“\d](\d{17,})[^”“\d];“content=Regex.Replace(content,pattern,@“$1”);
,但它似乎在两侧都替换了一个字符(在本例中,它删除了a:和,因为json没有空格)。知道这是原始正则表达式还是我在替换中添加了双引号的内容吗?我的错误-被删除的字符是正则表达式的简化版本(任何17位以上的数字)我正在使用,因为原始数据与任何值都不匹配,我希望看到它匹配。我将添加一些示例数据,以说明我使用您的示例数据的问题,下面是一个it匹配的示例:对于.net,我将删除字符串前面的
@
符号,并仅使用上一次更新的答案中的双反引号。Fantastic,我用各种转义字符迷惑了自己——删除了@works。我现在得到的输出是
{“blingCompoundKey”:{“id”4510887396879241701“dateTime”:143408734451},
。我认为在可能的引号两边各寻找一个字符的正则表达式参数也被算作替换目标的一部分。但是,如果没有这些参数,它也可以工作-我可能不得不接受