1

ウィキペディアの記事から紹介を得て、レポートに含めようとしています。たとえば、この記事の場合: http://en.wikipedia.org/wiki/MAP3K8

私は手に入れたい:

マイトジェン活性化プロテインキナーゼキナーゼキナーゼ 8 は、ヒトでは MAP3K8 遺伝子によってコードされる酵素です。この遺伝子は、細胞における発癌性形質転換活性によって同定された。コードされたタンパク質は、セリン/スレオニンプロテインキナーゼファミリーのメンバーです。
このキナーゼは、MAP キナーゼ経路と JNK キナーゼ経路の両方を活性化できます。このキナーゼは、IkappaB キナーゼを活性化し、NF-κB の核産生を誘導することが示されました。このキナーゼは、T リンパ球の活性化中に TNF-α および IL-2 の産生を促進することもわかっています。ラットにおける同様の遺伝子の研究は、NF-κB1,p105 (NFKB1) のタンパク質分解におけるこのキナーゼの直接的な関与を示唆した。この遺伝子はまた、下流のインフレーム翻訳開始コドンを利用する可能性があり、したがって、より短いN末端を含むアイソフォームを生成します。より短いアイソフォームは、より弱い変換活性を示すことが示されています。マウスでは、この遺伝子は Tpl2 として知られており、この遺伝子が存在しないと癌の発生と進行に寄与する腫瘍抑制遺伝子です。

この URL のページを取得しています: 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("&lt(.)*(>){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

したがって、これ"&lt(.)*(&gt;){1}"は部分全体と一致しています (最初の < と最後の > ですが、パターン > の 1 回だけの一致を求めています。

この正規表現の何が問題になっていますか? 私は何か見落としてますか?たぶん、これを解析するより良い方法ですか?(しかし、私が見つけたパーサーはどれも私を納得させませんでした)

PS 私のパーサーは http://en.wikipedia.org/wiki/NFKB2またはhttp://en.wikipedia.org/wiki/APOA4で動作しますが、より確実に実行したいと考えています。

4

1 に答える 1

0

私は実際に既存の問題を見つけることができません。両方の正規表現は正常に機能しています。コードに実装する前に、正規表現オンライン テスターを使用することをお勧めします。これを試してみてください: http://gskinner.com/RegExr/

于 2013-04-21T11:28:11.437 に答える