从json字符串的键字符串中替换或删除Dote(。),以便在mongodb中插入

时间:2019-01-28 08:21:26

标签: c# json regex mongodb bson

我想使用C#驱动程序将Json插入mongoDB中,但由于无法使用包含Dot(。)的键插入json,所以我得到了例外。 现在我想用_或其他替换键中的所有点...

我尝试这样:((?<=(\w))(\.)(?=(\w+)))

它选择了字符串之间的所有点,但是问题是无法验证键。例如,如果我在Json值中具有网站名称,也请在网站名称中选择点... 现在我需要一种方法来找到以(“:)结尾的单词之间的所有点 它是json的示例:

"activity:12356", "permalink": "https://www.hostname.com/fff/update    /urn:li:activity:123465", "tracking": {"trackingId": "sdjahgs/sfkdjk=="}, "value": {"com.site.aaaa.bbb.ccc": {"actor": {"com.aaa.sss.ddd.wwww": {"urn": ....

在这里,我想将“ com.aaa.sss.ddd.wwww”替换为“ com_aaa_sss_ddd_wwww”,但我的正则表达式会在www.hostname.com中选择点。

我也尝试了类似((?<=(\w))(\.)(?=(\w+)))(":$)的方法,但是没有用

1 个答案:

答案 0 :(得分:0)

仅使用正则表达式很难实现它,但是简单的正则表达式结合额外的代码来替换点将为您提供所需的结果:

var s = @"""activity:12356"", ""permalink"": ""https://www.hostname.com/fff/update    /urn:li:activity:123465"", ""tracking"": {""trackingId"": ""sdjahgs/sfkdjk==""}, ""value"": {""com.site.aaaa.bbb.ccc"": {""actor"": {""com.aaa.sss.ddd.wwww"": {""urn"": ....";
var matches = Regex.Matches(s, @"""[^""]+"":");
foreach (Match match in matches)
{
  var replace = match.Value.Replace('.', '_');
  s = s.Replace(match.Value, replace);
}

使用的模式:"[^"]+":,表示:

匹配",然后将"以外的一个或多个字符与[^"]+进行匹配,最后按字面匹配":