我有一个包含超过200个记录以下格式的文本文件:正则表达式匹配多行文本的块?
@INPROCEEDINGS{Rajan-Sullivan03,
author = {Hridesh Rajan and Kevin J. Sullivan},
title = {{{Eos}: Instance-Level Aspects for Integrated System Design}},
booktitle = {ESEC/FSE 2003},
year = {2003},
pages = {297--306},
month = sep,
isbn = {1-58113-743-5},
location = {Helsinki, FN},
owner = {Administrator},
timestamp = {2009.03.08}
}
@INPROCEEDINGS{ras-mor-models-06,
author = {Awais Rashid and Ana Moreira},
title = {Domain Models Are {NOT} Aspect Free},
booktitle = {MoDELS},
year = {2006},
editor = {Oscar Nierstrasz and Jon Whittle and David Harel and Gianna Reggio},
volume = {4199},
series = {Lecture Notes in Computer Science},
pages = {155--169},
publisher = {Springer},
bibdate = {2006-12-07},
bibsource = {DBLP, http://dblp.uni-trier.de/db/conf/models/models2006.html#RashidM06},
isbn = {3-540-45772-0},
owner = {aljasser},
timestamp = {2008.09.16},
url = {http://dx.doi.org/10.1007/11880240_12}
}
基本上是一个记录与@开始,以结束},所以我试图做的是先从@和结束} \ n}但没有工作,它只会匹配第一条记录和另一条记录,因为它后面没有新行。
string pattern = @"(^@)([\s\S]*)(}$\n}(\n))";
,当我试图通过使修复它,它匹配的一切,一个匹配
string pattern = @"(^@)([\s\S]*)(}$\n}(\n*))";
我都试过,直到我得出了以下模式,但它不工作,请你能不能修复它或者可以给出一个更有效率的一个加上对它做的一些小解释。
这里是我的代码:
string pattern = @"(^@)([\s\S]*)(}$\n}(\n))";
Regex regex = new Regex(pattern,RegexOptions.Multiline);
var matches = regex.Matches(bibFileContent).Cast<Match>().Select(m => m.Value).ToList();
具体谈谈什么是 “不工作” 的意思。给出你想要的输出的例子。 – tnw 2014-09-10 15:12:44
它只匹配第一条记录 – ykh 2014-09-10 15:15:01
这不是更简单吗? string pattern = @“@([^;] *)}”;这是和Regex一起玩的好地方http://www.regexr.com/ – 2014-09-10 15:15:47