Заменить или удалить точку (.) Из строки ключей в строке json для вставки в mongodb - PullRequest
0 голосов
/ 28 января 2019

Я хочу вставить Json в mongoDB с помощью драйвера C #, но я получаю исключение, потому что вы не можете вставить 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 "with" com_aaa_sss_ddd_wwww ", но мой regex выбирает точки в www.hostname.com

я также пытаюсь что-то вроде ((?<=(\w))(\.)(?=(\w+)))(":$), но не работает

1 Ответ

0 голосов
/ 28 января 2019

Сложно достичь этого только с помощью регулярного выражения, но простое регулярное выражение в сочетании с дополнительным кодом для замены точек даст желаемый результат:

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);
}

Используемый шаблон: "[^"]+":, что означает:

соответствует ", затем соответствует одному или нескольким символам, отличным от ", с [^"]+, а в конце соответствует ": буквально.

...