C # Regex.Replace, двоеточие как разделитель, игнорировать формат DateTime - PullRequest
6 голосов
/ 20 мая 2011

У меня есть следующая строка:

[{names: {en: "US 30 - 5 Minute Level", es: "US 30 - 5 Minute Level"}, status: "A", displayed: "Y", start_time: "2011-05-20 00:00:00", start_time_xls: {en: "20th of May 2011  00:00 am", es: "20 May 2011 00:00 am"}, suspend_at: "2011-05-20 16:53:48", is_off: "Y", score_home: "", score_away: "", bids_status: "", period_id: "", curr_period_start_time: "", score_extra_info: "", settled: "N", ev_id: 2688484, ev_type_id: 10745, num_mkts: 5, venues: {en: "", es: ""}, disporder: 2040, ev_stream_available: false}]

Мне нужно заключить все имена переменных в кавычки, чтобы это подтвердилось как JSON.Я делал следующее, но это также разбивало даты.,

Regex.Replace(input, @"(\w+:)", "\"$0\":", RegexOptions.None);

Вывод после Regex. Замена:

[{"names" {"en" "US 30 - 5 Minute Level", "es" "US 30 - 5 Minute Level"}, "status" "A", "displayed" "Y", "start_time" "2011-05-20 "00""00"00", "start_time_xls" {"en" "20th of May 2011 "00"00 am", "es" "20 May 2011 "00"00 am"}, "suspend_at" "2011-05-20 "16""53"48", "is_off" "Y", "score_home" "", "score_away" "", "bids_status" "", "period_id" "", "curr_period_start_time" "", "score_extra_info" "", "settled" "N", "ev_id" 2688484, "ev_type_id" 10745, "num_mkts" 5, "venues" {"en" "", "es" ""}, "disporder" 2040, "ev_stream_available" false}]

Как я могу изменить это, чтобы игнорировать их?Кроме того, что является хорошим веб-ресурсом, чтобы раз и навсегда докопаться до регулярных выражений?!

Спасибо.

1 Ответ

3 голосов
/ 20 мая 2011

Попробуйте этот шаблон:

string pattern = @"\b([A-Za-z_]+)\b(?=:)";
string replace = "\"$0\"";
string result = Regex.Replace(input, pattern, replace);
Console.WriteLine(result);

[A-Za-z_]+ соответствует любому алфавиту в верхнем / нижнем регистре и символу подчеркивания один или несколько раз. Это прекрасно работает, если ни одно из имен JSON не содержит чисел. Метасимвол \b соответствует границе слова, а (?=:) соответствует - но не захватывает - двоеточие. Вы заметите, что шаблон replace не содержит двоеточия.

Аналогично, этот шаблон будет работать: @"\b([^\d\s]+)\b(?=:)", поскольку он соответствует всему, что не является числом или пробелом.

Изучение регулярных выражений требует большой практики, чтобы понять концепции, опробовать примеры и обдумать, как все работает. Я предлагаю взять инструмент, который позволит вам опробовать их вместе с некоторыми учебными пособиями. Для начала:

Это должно начать вас. Если вы действительно хотите погрузиться глубже, обратите внимание на две хорошие книги:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...