2017-09-12 12 views
0

私はWebページを読み込んで、WebページからコンテンツをgrepするC#コードを書いています。 私は内容を把握するために多くの時間を費やし、今私はこれに引っかかっ:最後の>の後に始まる文字列を正規表現で取得する方法は?

<i class="icon"></i><a href="https://www.nytimes.com/2017/09/12/us/irma-storm-updates.html">Latest Updates: 90 Percent of Houses in Florida Keys Are Damaged 

私が取得したい:のみ 私が使用するために使用される「最新の更新情報をキーウエストの住宅の90%が損傷しています」 " (?< = \ ">)(。*)"を使用すると、コンテンツを正常に出力できますが、

はありがとう。

+0

私はHTMLパーサーを使用することをお勧めします。しかし、あなたは正規表現を使用する必要がある場合は、どのような言語を使用していますか? – sniperd

+0

私はC#を使用しています。私の働く場所からの割り当てです。 –

答えて

0

これはあなたがここに必要な正規表現ではRegexStにおける実施例でありますorm.net example

>([^<>]+) 

これは言う:角括弧が含まれていないテキストが続き、終了角括弧にマッチした文字列を検索します。 [^ <]は、開かれていない文字、数字、空白の検索を示しています。 [^ <>]括弧は、テキストを別のグループとして取り込みます。 (+)は、少なくとも1つ以上を得ると言う。

これを使用するC#の例を次に示します。必要なテキストの2番目のキャプチャグループを取得する必要があります。

void Main() 
{ 
    string text = "<i class=\"icon\"></i><a href=\"https://www.nytimes.com/2017/09/12/us/irma-storm-updates.html\">Latest Updates: 90 Percent of Houses in Florida Keys Are Damaged"; 
    Regex regex = new Regex(">([^<>]+)"); 

    MatchCollection matchCollection = regex.Matches(text); 

    if (matchCollection != null) 
    { 
     foreach (Match m in matchCollection) 
     { 
      Console.WriteLine(m.Groups[1].Value); 
     } 
    } 
} 

RegexStorm.netは良い.Netテストサイトです。 Regex101.comは、さまざまなRegexツールを学ぶ良いサイトです。

+0

私は良いR.Eではありません。あなたはこれで頭痛を感じる-_- " 1つの質問>と+は何ですか? REを学ぶ良い提案やリソースはありますか?私は大学にいたときコンピュータロジックのコースでREを学びました...私は今何も学んでいないと感じています。 –

+0

私はそれが唯一の問題は文字列の先頭にある文字列の先頭にreallllllllllを近づけました。 –

+0

m.Groups [1] .Valueを取得しましたか?最初のキャプチャグループには、>。 –

0

照合するサブストリングが、それについてあなたが知っている主なものは、それが>が含まれていないということである最後の>後に表示された場合。これは[^>]と一致します。文字列に少なくとも1文字が含まれている必要がある場合は、+を量子として使用します。空であることが許されている場合は、*を使用してゼロの一致を許可します。最後に、テキストの残りの部分を、行末まで一致させる必要があります。これは、$で行います。

したがって、完全な式は[^>]*$(または長さがゼロでない場合は[^>]+$)です。

あなたはが>を持って前のテキストが、あなたは、非マッチングルックビハインド(?<=\>)を使用して、それが少し複雑にすることができないことも必要とします。これは、>(ここでは\>でエスケープする必要があります)を検索しますが、試合には含めません。最終的な式は(?<=\>)[^>]*$となります。さて、C#の文字列は、\をエスケープするために使用するため、Regexコンストラクタに渡す前に2回エスケープする必要があります。したがって、それはnew Regex("(?<=\\>)[^>]*$")になります。

より簡単なバージョンの[^>]*$で十分です。

最後に、XMLやHTMLを正規表現で解析することは、通常は間違っていると言います。なぜなら、大文字小文字の問題が多いため、書式設定について前提を取らなければならないからです。たとえば、あなたの例のテキストに基づいて、私はあなたが入力テキストの最後まで検索していると仮定しました。通常、XMLパーサでXMLを解析する方が良いでしょう。これらの問題は発生しません。

+0

聖なるものが含まれます。あなたの表現は... は、これら2つの表現を1つに組み合わせることが可能ですか? string titleRegex = "(?<= story-heading)(。 *)(?=)[^>] * $ "; 何私は、まず文字列を取得するためにtitleRegexを使用し、次のR.E.によってトリムを作成しました。これはちょっと浮気のようです。 –

+0

あなたは私がR.E.を学ぶことができる良いリソースがありますか?まあ? –

+0

@JackyCheung無料のリソースはたくさんあります。まず、リンクとリソースが豊富な[Stackoverflow Regex tag wiki](https://stackoverflow.com/tags/regex/info)を見てみてください。下にスクロールして「追加の読書」セクションに進みますが、ページのテキストにもいくつかの基本があります。 –

関連する問題