0

私はそのテキストを持っています:

<a href="/extend/themes/bizway">BizWay</a>

そして、正規表現を使用して、タグの内部テキストからのみ抽出された BizWay 単語を取得したいと考えています。ちなみにこれはタグのサンプルですが、BizWayはどんな単語でも構いません

だから、次のようなREGEXが欲しいとしましょう:

<a href=" + '"' + "/extend/themes/WORD" + '"' + ">WORD</a>

WORD = WORD

編集 :

次のREGEXパターンを試しました:

@"<a href=" + '"' + "/extend/themes/.*" + '"' + @">.*</a>"

しかし、それは私に全行を与えます。

助けていただければ幸いです。

4

4 に答える 4

4

正規表現を使用する代わりに、C# 用の HTML パーサー ライブラリを使用することをお勧めします (これについては、stackoverflow RegEx match open tags except XHTML self-contained tagsから長い議論があります)。

簡単な検索から、HTMLAgilityPack は C# に適しているようです。このスタックオーバーフローの投稿は、C# プロジェクトでこの設定を行うのに役立ちます。HTMLアジリティパックの使い方

于 2012-06-20T17:03:48.653 に答える
2

私は loeschg に心から同意します。私はこのアドバイスを無視するという過ちを犯し、正規表現を使用しました。コードを微調整して約 1 か月後、HtmlAgilityPack を使用することになりました。正規表現を使用した Html の解析は、期待するほど簡単ではありません。変数が多すぎます。

ここがあなたの出発点です...

string rawHtml = "<a href=\"/extend/themes/bizway\">BizWay</a>"

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(rawHtml);
HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//a/@href");
foreach (var node in linkNodes)
{
    string word = node.InnerText;
}

href の値を確認するには、これを行うことができます...

if (node.Attributes["href"].Value.Contains("extend/themes"))
于 2012-06-20T17:39:40.020 に答える
0

行の一部だけが必要な場合は、グループを使用することをお勧めします。これを行うには、後で取得する部分を括弧で囲み、オプションで次のような名前を付けます。

?<name>

それで:

Match m = Regex.Match(@"<a href='/extend/themes/bizway'>BizWay</a>", 
                      @"<a href='/extend/themes/(?<word1>.+)'>(?<word2>.+)</a>");
Console.WriteLine(m.Groups["word1"] + " " + m.Groups["word2"]);

「bizwayBizWay」を印刷します。

于 2012-06-20T17:45:05.070 に答える
0

問題は正規表現自体ではなく、それが何をするかについてのあなたの期待だと思います。私の経験では、正規表現システムは、指定された完全なパターンに一致するテキストを返します。ワイルド カードに一致するピースのみが返されることを期待しています。残念ながら、それは正規表現の仕組みではありません。関心のある行のビットについて、正規表現の結果を解析する必要があります。

また、HTML を解析するには、loeschg が言及しているように、HTML 解析ライブラリを使用する方がよいでしょう。

于 2012-06-20T17:39:21.407 に答える