我正试图从维基百科文章中获取介绍,将其纳入报告。 例如,对于本文: http://en.wikipedia.org/wiki/MAP3K8
我想得到:
丝裂原活化蛋白激酶激酶激酶8是一种酶 在人类中由MAP3K8基因编码。鉴定了该基因 通过其在细胞中的致癌转化活性。编码 蛋白质是丝氨酸/苏氨酸蛋白激酶家族的成员 该激酶可以激活MAP激酶和JNK激酶途径。 该激酶显示激活IkappaB激酶,从而诱导激酶 核生产NF-κB。还发现了这种激酶 在T淋巴细胞中促进TNF-α和IL-2的产生 激活。大鼠中类似基因的研究表明直接 该激酶参与NF-κB1,p105的蛋白水解 (NFKB1)。该基因也可以利用下游框内 翻译起始密码子,从而产生含有a的同种型 较短的N末端。已显示较短的同种型显示 转化活动较弱。在小鼠中,该基因被称为Tpl2 并且它是一种肿瘤抑制基因,其缺失有助于 癌症的发展和进展。
我正在使用此网址获取该网页:http://en.wikipedia.org/wiki/Special:Export/MAP3K8
我将此帖子的代码转换为http://forums.asp.net/t/1066507.aspx/1到C#:
HttpWebRequest request =(HttpWebRequest)HttpWebRequest.Create("http:// en.wikipedia.org/wiki/Special:Export/MAP3K8");
request.Accept = "text/hmtl";
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
Stream responseStream = response.GetResponseStream();
XmlTextReader reader = new XmlTextReader(responseStream);
String NS = "http://www.mediawiki.org/xml/export-0.8/";
XPathDocument doc = new XPathDocument(reader);
reader.Close();
response.Close();
XPathNavigator myxpathnav = doc.CreateNavigator();
XPathNodeIterator nodesText = myxpathnav.SelectDescendants("text", NS, false);
while (nodesText.MoveNext())
{
ViewBag.Message += nodesText.Current.InnerXml;
}
ViewBag.Summary = getSummary(ViewBag.Message);
return View();
getSummary方法,根据PBB模板:http://en.wikipedia.org/wiki/Template:PBB_Controls
我只想获取蛋白质的信息,如果是这样的话。
public string getSummary(string page)
{
string res = "";
//The introduction is in 2 parts:
//1st between "{{PBB|geneid=1326}}" and <!-- The PBB_Summary (.)* -->
string intro = "";
//2nd between "summary_text =" and "=="
//http://en.wik ipedia.org/wiki/Special:Export/MAP3K8 is used as example
string summary = "";
try
{
intro = page.Split(new string[] { "}}" }, StringSplitOptions.None)[1];
intro = intro.Split(new string[] { "<!--" }, StringSplitOptions.None)[0];
intro = deleteMediaWikiTag(intro);
}
catch(Exception)
{
intro = "";
}
try
{
summary += page.Split(new string[] { "summary_text =" }, StringSplitOptions.None)[1];
summary = summary.Split(new string[] { "==" }, StringSplitOptions.None)[0];
summary = deleteMediaWikiTag(summary);
}
catch(Exception)
{
summary = "";
}
res = intro + "\n\n" + summary;
return res;
}
public string deleteMediaWikiTag(string text)
{
string res = "";
// this is working well
Regex reg = new Regex("{{.*(}})*|{{|}}|'''|<!--.*-->|]]|([[]){2}");
res = reg.Replace(text,"");
//I don't understand what is wrong with this regex
Regex regprime = new Regex("<(.)*(>){1}");
res = regprime.Replace(res, "PRIME");
return res;
}
我的问题在于deleteMediaWikiTag(summary)
的执行,因为我正在丢失摘要部分的结尾:
在小鼠体内,这种基因被称为Tpl2,它是一种肿瘤抑制基因,其缺失有助于癌症的发展和进展。
在由正则表达式处理之前,本文看起来像:
<ref name="entrez" />
In mice, this gene is known as Tpl2 and it is a tumor suppressor gene whose absence contributes to the development and progression of cancer.
<ref>{{cite web|last=DeCicco-Skinner|first=Kathleen|title=Loss of tumor progression locus 2 (tpl2) enhances tumorigenesis and inflammation in two-stage skin carcinogenesis|url=http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3460638/}}</ref>
所以根据我的正则表达式,我期待类似的东西:(PRIME用于突出显示匹配,最后,我将删除与我的正则表达式匹配的所有内容)
PRIME In mice *.....* PRIME
但我明白了:
PRIME
所以这个"<(.)*(>){1}"
与整个部分匹配(第一个&lt; lt和最后一个&gt;但是我要求匹配只有一次模式&gt;这不止一次,如果我拿走了一切......
这个正则表达式出了什么问题?我错过了什么?也许是解析这个问题的更好方法? (但我发现的解析器都没有说服我)
P.S。我的解析器适用于: http://en.wikipedia.org/wiki/NFKB2或http://en.wikipedia.org/wiki/APOA4但我想更可靠地完成这项工作。
答案 0 :(得分:0)
我真的找不到退出的问题。两个正则表达式都正常工作。我建议在代码中实现之前使用正则表达式在线测试程序。试试这个:http://gskinner.com/RegExr/