2012-06-26 85 views
1

注意:此問題中的所有引號實際上都是代碼的一部分。在正則表達式中使用引號,用C#中的引號引起來

我正在學習正則表達式,我試圖用音樂颳去一個網站。我把網站的來源放到一個名爲'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#中時,我必須用引號括起來,這會在正則表達式中毀掉引號。繼承人的代碼(它不會編譯,如果去掉周圍的正則表達式一對引號的,它不過很明顯犯規返回源的正確部分):

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

在此先感謝!

回答

3

這將做

"[^"]*" 

注意,我讓你到你的樣品輸入和假設的標題是引用的唯一的事情。如果不是這種情況,你必須在正則表達式中加入更多的上下文。

如果你想不帶引號捕捉到你可以像這樣

"([^"]*)" 

介紹括號在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(); 
} 
+0

對不起,我有點小白,如何將添加那到我的代碼?我嘗試了幾種不同的方式來處理錯誤。謝謝 – Lavi

+0

@Lavi沒有問題,用一些示例代碼更新了答案 – buckley

+0

+1 - 很好的答案 –

相關問題