1

注:この質問のすべての引用符は、実際にはコードの一部です。

私は正規表現を学んでいて、音楽が載っているサイトをこすり取ろうとしています。サイトのソースを「ytcmusic.txt」というテキストファイルに入れました。これがhtmlのサンプルです:

<li><a href="angelpool%20-%20know.mp3"> angelpool - know.mp3</a></li>
<li><a href="angelpool%20-%20sellout.mp3"> angelpool - sellout.mp3</a></li>
<li><a href="angelpool%20-%20time.mp3"> angelpool - time.mp3</a></li>
<li><a href="bella%20-%20gibsons.mp3"> bella - gibsons.mp3</a></li>

最初の行を例として使用します。「angelpool%20-%20know.mp3」のみをスクレイプしようとしています。これを行うために、使用した正規表現は次のとおりです。「。*。mp3」----- -C#に入れるときは、引用符で囲む必要があります。これにより、正規表現の引用符が台無しになります。ここにコードがあります(コンパイルされません。正規表現の周りの引用符のセットを1つ削除すると、コンパイルされますが、明らかにソースの正しい部分が返されません):

var sr = new StreamReader("ytcmusic.txt");
        string str = sr.ReadToEnd();
        var match = Regex.Match(str, @".*.mp3");

前もって感謝します!

4

1 に答える 1

2

これでうまくいく

"[^"]*"

私はあなたのサンプル入力を維持し、タイトルだけが引用されていると仮定していることに注意してください。そうでない場合は、正規表現により多くのコンテキストを追加する必要があります。

引用符なしでキャプチャしたい場合は、そのように括弧を導入できます

"([^"]*)"

C#ではこれは次のようになります

StringCollection resultList = new StringCollection();
Regex regexObj = new Regex("\"([^\"]*)\"");
Match matchResult = regexObj.Match(subjectString);
while (matchResult.Success) {
    resultList.Add(matchResult.Groups[1].Value);
    matchResult = matchResult.NextMatch();
} 
于 2012-06-26T23:08:09.877 に答える