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# 中时,我必须用引号将它括起来,这会破坏正则表达式中的引号。继承人的代码(它不编译,如果你删除正则表达式周围的一组引号,它会但显然不返回源的正确部分):

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 回答