注意:这个问题中的所有引号实际上都是代码的一部分。
我正在学习正则表达式,我正在尝试抓取一个带有音乐的网站。我将网站的源代码放入名为“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");
提前致谢!
这样就可以了
"[^"]*"
请注意,我会保留您的示例输入,并假设标题是唯一引用的内容。如果情况并非如此,您必须在正则表达式中添加更多上下文。
如果你想在不带引号的情况下捕获,你可以像这样引入括号
"([^"]*)"
在 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();
}
这对我来说可以匹配字符串
"sep=;"
(包括引号)
if (Regex.Match(stringToCheck, @"([^']sep=)").Success)
^
检查字符串是否以 "
开头