2016-03-25 3 views
0

У меня есть строка из 2000 символов. Я хочу найти конкретный шаблон, а затем заменить часть этого шаблона.Regex заменить значение определенного шаблона (escape двойные кавычки)

строка выглядит следующим образом:

data = "additional data \"StartDate\":\"20141101\" additonal data additional data" 

Есть ли способ, чтобы изменить значение 20141101 с каким-либо другим значением сказать 20121212, что находится рядом с STARTDATE. У меня проблемы с двойными кавычками, которые находятся рядом с шаблоном поиска.

+0

Что для вас проблема? Какая у вас проблема с регулярным выражением? – xanatos

+0

проблема в том, что конкретная строка даты может возникать несколько раз в реальной строке, просто нужно изменить значение, связанное с датой начала. Примечание: фактическая строка не является надлежащим json-объектом, ее случайной строкой. Объект json является частью этой строки – user2406618

ответ

1

Некоторые возможные решения:

string data = "additional data \"StartDate\":\"20141101\" additonal data additional data"; 

В одном я хотел бы использовать: он использует нулевой ширины утверждения на "совпадение" THE "StartDate":" и окончательный ":

string data2 = Regex.Replace(data, "(?<=\"StartDate\":\")([0-9]{8})(?=\")", "xxxxxxxx"); 

"простое" решение: он соответствует \"StartDate\":\"20141101\" и заменяет \"StartDate\":\"xxxxxxxx\"

string data3 = Regex.Replace(data, "\"StartDate\":\"[0-9]{8}\"", "\"StartDate\":\"xxxxxxxx\""); 

Другое решение, основанное на использовании специальных Заменители $1, $3, которые являются строки, захваченные в первой и третьей группы захвата ((...))

string data4 = Regex.Replace(data, "(\"StartDate\":\")([0-9]{8})(\")", "$1xxxxxxxx$3"); 
+0

приятный для данных2. Мне нужно решение для замены ценности. Большое спасибо – user2406618

0

если значение всегда числовое:

var data = "additional data \"StartDate\":\"20141101\" additonal data additional data"; 
var num = new Regex("StartDate.+?(\\d+)").Match(data).Groups[1].Value; 
Console.WriteLine(data.Replace(num, "20121212")); 
Смежные вопросы