在正则表达式中使用引号,在 C# 中使用引号

问题描述 投票:0回答:2

注意:这个问题中的所有引号实际上都是代码的一部分。

我正在学习正则表达式,我正在尝试抓取一个带有音乐的网站。我将网站的源代码放入名为“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# regex quotes
2个回答
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();
} 

0
投票

这对我来说可以匹配字符串

"sep=;"
(包括引号)

if (Regex.Match(stringToCheck, @"([^']sep=)").Success)

^
检查字符串是否以
"

开头
© www.soinside.com 2019 - 2024. All rights reserved.