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。