2013-05-28 2 views
0

У меня есть файл, и я хочу изменить текст внутри него с помощью регулярного выражения.Регулярное выражение для изменения строки между фигурными скобками

"code": { 
    "restore": 1, 
    "restore_on_startup": true, 
}, 

Я хочу, чтобы изменить текст между

"code": {

и

},

Я пытался что-то вроде

Regex.Replace(subject, @"?xxx.*?yyy", "Replace");

Но поскольку мой текст содержит новые строки, это не сработало.

+9

Регулярное выражение - неправильный инструмент. Используйте анализатор JSON. –

+0

Не могли бы вы направить меня на парсер Json? Парсер Json и образец учебника по моему вопросу были бы замечательными. – digiogi

ответ

1

Это регулярное выражение должно работать для seample, он заменит все внутри скобок

Regex.Replace(subject,"(?<=\"code\":\\s{).*?(?=},)", "replace", RegexOptions.Singleline); 

"Код": { "восстановление": 1, "restore_on_startup": правда, },

даст

"код": {заменить},

Регулярное выражение в основном говорит о том, что соответствует всем, что префикс "code": {, и помещается },, а затем заменяет все внутри моим заменить. Вам может потребоваться настроить его в соответствии с вашими потребностями.

+0

Работает. Спасибо за помощь. Могу ли я спросить, что делает RegexOptions.Singleline? Почему не MultiLine? – digiogi

+1

@digiogi Multiline - это то, когда вы хотите, чтобы '^' и '$' соответствовали каждой строке, а Singleline делает '.' соответствие всем, включая разрывы строк, см. Эту ссылку для получения дополнительной информации, http://msdn.microsoft.com/ en-us/library/yd1hzczs.aspx – Jason

+0

Я понял это очень четко. И что делает '\\ s'? Я не понимаю регулярное выражение и хочу его изучить. – digiogi

0

Я предлагаю вам перейти по строке, которая ищет "code": {.

Что найдено, начиная с этой же строки начинайте поиск }. (Осторожно, чтобы следить за code частей в первой строке, потому что может быть } до code)

Go хранящего всех строки с List<string> Add, пока вы не найдете }.

После этого конкат всех строк, найденных в одной строке, выполните замену. Удалите все эти строки из файла и добавьте новую сформированную строку.

+0

Спасибо за подсказку. Я попробую это, если я не смогу сделать это с парсером Json. – digiogi

1

использование

(.|\\r|\\n)*? 

вместо

.*? 

или использовать многострочный свойство в классе RegexOptions

Смежные вопросы