2013-05-28 177 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}

转到存储与List<string> Add所有行。

之后,连接你在单个字符串中找到的所有行,进行替换。 从文件中删除所有这些行并添加新形成的字符串。

+0

感谢您的提示。如果我无法使用Json解析器,我会尝试这个。 – digiogi

1

使用

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

,而不是

.*? 

,或者使用多属性的RegexOptions类

相关问题