C#Regex Can';无法匹配任何内容(可能是因为无法正确转义字符)

C#Regex Can';无法匹配任何内容(可能是因为无法正确转义字符),c#,regex,C#,Regex,我制作了一个正则表达式模式,并在该站点进行了测试: 我把这个模式写在那个网站的第一个盒子里 <div class="product clearfix">\n+<div class="img">\n+<a href="(.*?)">\n+<img class="lazyload" id='.*' data-original="(.*?)" alt=".*" title="(.*?)" \/> \n+\n+\n+ 我让第二个盒子空着 我的正则表达式

我制作了一个正则表达式模式,并在该站点进行了测试:

我把这个模式写在那个网站的第一个盒子里

<div class="product clearfix">\n+<div class="img">\n+<a href="(.*?)">\n+<img class="lazyload" id='.*' data-original="(.*?)" alt=".*" title="(.*?)" \/>
\n+\n+\n+
我让第二个盒子空着

我的正则表达式模式在这个网站上运行得非常好

但我不能让它在C中工作#

我正在尝试这个:

WebClient client = new WebClient();

string MainPage = client.DownloadString("http://www.vatanbilgisayar.com/cep-telefonu-modelleri/");

string ItemPattern = "<div class=\"product clearfix\">\\n+" +   //  <div class="product clearfix">\n
                "<div class=\"img\">\\n" +                  //  <div class="img">\n
                "+<a href=\"(.*?)\">\\n" +                  //  +<a href="(.*?)">\n
                "+<img class=\"lazyload\"" +                //  +<img class="lazyload"
                "id='.*' data-original=\"(.*?)\"" +         //  id='.*' data-original="(.*?)"
                "alt=\".*\" title=\"(.*?)\"\\/>";           //  alt=".*" title="(.*?)" \/>

MatchCollection matches = Regex.Matches(MainPage, ItemPattern);

foreach (Match match in matches)
{
    Console.WriteLine("Area Code:        {0}", match.Groups[1].Value);
    Console.WriteLine("Telephone number: {0}", match.Groups[2].Value);
    Console.WriteLine();
}
WebClient=newWebClient();
string MainPage=client.DownloadString(“http://www.vatanbilgisayar.com/cep-telefonu-modelleri/");
string ItemPattern=“\\n+”++/\n
“\\n”+/\n
“+\\n”+/+/+\n
"+";           //  alt=“.*”title=“(.*?”\/>
MatchCollection matches=Regex.matches(主页,ItemPattern);
foreach(匹配中的匹配)
{
WriteLine(“区号:{0}”,match.Groups[1].Value);
WriteLine(“电话号码:{0}”,match.Groups[2].Value);
Console.WriteLine();
}

我只是对每个“with\”进行了转义。我真的不明白为什么它不起作用,这让我开始发疯。

你需要两层转义序列。你需要对
c.
进行一次转义,对regex语法进行一次转义


如果您想为正则表达式转义字符,也必须转义
\
,因此您应该将正则表达式级别的转义序列的
\
更改为
\
,对字符串中的每一个\使用两个。不计算已经对引号进行的转义。因为\是一个转义字符。它看起来主要是h“\n”出现3次

原始字符串:

"product clearfix">\n+<div class="img">\n+<a href="(.*?)">\n+<img class="lazyload" id='.*' data-original="(.*?)" alt=".*" title="(.*?)" \/
string ItemPattern = "<div class=\"product clearfix\">\\n" +   //  <div class="product clearfix">\n
                    "+<div class=\"img\">\\n" +                 //  +<div class="img">\n
                    "+<a href=\"(.*?)\">\\n" +                  //  +<a href="(.*?)">\n
                    "+<img class=\"lazyload\"" +                //  +<img class="lazyload"
                    "id='.*' data-original=\"(.*?)\"" +         //  id='.*' data-original="(.*?)"
                    "alt=\".*\" title=\"(.*?)\"\\/>";           //  alt=".*" title="(.*?)" \/>
“产品clearfix”>\n+\n+\n+

如果您仍然有问题,则可能是RegEx.Match(主页,ItemPattern)中的其他错误。根据您所做的调试,听起来好像字符串正在成功创建,并且没有MatchCollection。因此,这要么是因为您如何获取匹配项,要么是因为引用了匹配项。

您转义了引号,但没有反斜杠。只需使用原始字符串文字(
@“
)取而代之。你能写下我应该使用的最终模式吗?这对我来说更容易理解。首先,乔恩的帽子不可能那么合适!哦,这里有一个问题,你可能会发现相关的问题,你又在与什么相匹配?你能写下我应该使用的最终模式吗?因为我按照你说的做了尝试,但它是正确的它不起作用。@user2617750如果您包含要从中获取匹配项的文本或使用C#的逐字字符串,
@“
它不起作用,对我来说这会容易得多:(请您输入此站点并输入\n+\n+作为测试字符串。然后查看页面底部的匹配组。当我使用此测试字符串在C#中尝试您的解决方案时,它与任何内容都不匹配。title=“(.*)”\/>或title=“(.*)”/>\n+\n+\n+我正将此内容写入该站点的第一个框中,并将第二个框留空。我想原因是在你的原始帖子中,你没有完全那样写。这是最后三个字符。我将修改上面的代码。请参阅我的上一条评论,以了解我的区别完全正确。仍然无法匹配任何内容。我在问题中编辑了与您的模式相关的代码。我正在使用该代码,但仍然无法匹配任何内容。我真的不明白为什么这不起作用。也许我应该放弃使用正则表达式解析html。