2014-09-10 83 views
0

我有以下数据记录:嵌套花括号内数据的正则表达式?

@INPROCEEDINGS{conf/icsm/Ceccato07, 
    author = {Mariano Ceccato}, 
    title = {Migrating Object Oriented code to Aspect Oriented Programming}, 
    booktitle = {ICSM}, 
    year = {2007}, 
    pages = {497--498}, 
    publisher = {IEEE}, 
    bibdate = {2008-11-18}, 
    bibsource = {DBLP, http://dblp.uni-trier.de/db/conf/icsm/icsm2007.html#Ceccato07}, 
    crossref = {conf/icsm/2007}, 
    owner = {Administrator}, 
    timestamp = {2009.04.30}, 
    url = {http://dx.doi.org/10.1109/ICSM.2007.4362668} 
} 

有没有一种方法,我可以得到下面的匹配问题,使得每一行是一个单独的匹配

conf/icsm/Ceccato07 
    author = Mariano Ceccato 
    title = Migrating Object Oriented code to Aspect Oriented Programming 
    booktitle = ICSM 
    year = 2007 
    pages = 497--498 
    publisher = IEEE 
    bibdate = 2008-11-18 
    bibsource = DBLP, http://dblp.uni-trier.de/db/conf/icsm/icsm2007.html#Ceccato07 
    crossref = conf/icsm/2007 
    owner = Administrator 
    timestamp = 2009.04.30 
    url = http://dx.doi.org/10.1109/ICSM.2007.4362668 

这里是我的图案,其错过了第一行匹配,并没有位摆脱大括号和逗号

string pattern = ".*[{].*}"; 
+0

是的,有...但你尝试过这么远吗? – 2014-09-10 21:24:23

+1

因为我不是正则表达式的忠实粉丝,并且因为你很难理解这一点,所以不会string.Replace()是一个稍微简单的选项? – user2366842 2014-09-10 21:25:16

+0

我们需要更多的选票,当你告诉我为什么,或许我可以通过我的头脑来获得它。 – ykh 2014-09-10 21:27:54

回答

1

这个正则表达式,在单线模式,将抓住一切内外侧的两个括号:

(?<=\{).*(?=\}) 

然后你可以使用C#来去掉内部括号:

var regex = new Regex(@"(?<=\{).*(?=\})", RegexOptions.Singleline); 
var match = regex.Match(input); 

return match.Value.Replace("{", string.Empty).Replace("}", string.Empty);