0

ASP.NET Web サイトで、正規表現の使用に問題があります。Web クライアントを使用してソースをダウンロードし、Web サイトのソースから 2 つの正規表現の数を取得したいと考えています。

tmz.com Web サイトで検索して、正規表現の数を取得したい。

基本的に、すべての行にキーワードを含むテキスト ファイルがあります。私は2人のアーティストを入れ、各行に行き、artist1+regex+keyword+regex+artist2のような正規表現パターンを作ります。アイデアは、自分のキーワードとアーティストでカウント (検索が見つかった) 数を確認することです。

これが私の関数のソースコードです。

 int counts = 0;
    string line = "";
    StreamReader read = new StreamReader(@"C:\words.txt");
    WebClient web = new WebClient();
    string content = web.DownloadString("http://www.tmz.com/search/news/" + artist1 + " " + artist2);
    while ((line = read.ReadLine()) != null)
    {

            string pattern = artist1 + "[a-zA-Z0-9\\s]{1,10}" + line + "[a-zA-Z0-9\\s]{1,10}" + artist2;
            MatchCollection matches = Regex.Matches(pattern, content);
            counts += matches.Count;
            string pattern2 = artist2 + "[a-zA-Z0-9\\s]{1,10}" + line + "[a-zA-Z0-9\\s]{1,10}" + artist1;
            MatchCollection matches1 = Regex.Matches(pattern2, content);
            counts += matches1.Count;
    }
    read.Close();
    return counts;

しかし、次のエラーが表示されます: 説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

そして、私が得た赤い行 (エラーのある行はこれです): Line 54: MatchCollection matches = Regex.Matches(pattern, content);

正確な例外:

System.ArgumentException was unhandled by user code
  Message=parsing "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:meebo="http://www.meebo.com/" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://ogp.me/ns/fb#">
<head>
        <script type="text/javascript">var _sf_startpt=(new Date()).getTime()</script>
    <title>Search bowwow tyra - news - Page 1 | TMZ.com </title>
    <meta name="robots" content="all"/>
    <meta name="description" content="Celebrity Gossip and Entertainment News, Covering Celebrity News and Hollywood Rumors. Get All The Latest Gossip at TMZ - Thirty Mile Zone" />
    <meta name="generator" content="Crowd Fusion 2.0-enterprise" />
    <!-- Site Verification -->
    <meta name="google-site-verification" content="UUmtbUBf3djgPpCeLefe_PbFsOc6JGxfXmHzpjFLAEQ" />
    <meta name="verify-v1" content="Wtpd0N6FufoE2XqopQJoTjWV6Co/Mny9BTaswPJbPPA=" />
    <meta name="msvalidate.01" content="AFEB17971BCF30779AEA662782EF26F4" />
    <meta name="y_..." - Too many )'s.
  Source=System
  StackTrace:
       at System.Text.RegularExpressions.RegexParser.ScanRegex()
       at System.Text.RegularExpressions.RegexParser.Parse(String re, RegexOptions op)
       at System.Text.RegularExpressions.Regex..ctor(String pattern, RegexOptions options, Boolean useCache)
       at System.Text.RegularExpressions.Regex.Matches(String input, String pattern)
       at _Default.tmz(String artist1, String artist2) in c:\Users\icebox19\Documents\Visual Studio 2010\WebSites\WebSite3\Default.aspx.cs:line 52
       at _Default.Button1_Click(Object sender, EventArgs e) in c:\Users\icebox19\Documents\Visual Studio 2010\WebSites\WebSite3\Default.aspx.cs:line 89
       at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
       at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException:

PS: C# スタンドアロン アプリケーションではなく、ASP.NET Web サイトを使用します。これは Web ページです。

4

1 に答える 1

3

これは、間違ったパラメーターを使用しているためです。Regex.Matches(INPUT, PATTERN) である必要があります。

于 2012-10-17T14:49:54.333 に答える