我制作了一个正则表达式模式并在此网站中进行了测试:http://rubular.com/
我将此模式与此网站中的第一个框完全相同。
<div class="product clearfix">\n+<div class="img">\n+<a href="(.*?)">\n+<img class="lazyload" id='.*' data-original="(.*?)" alt=".*" title="(.*?)" \/>
我把第二个盒子留空了。
我的正则表达式非常适合这个网站。
但我无法在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();
}
我只是逃脱了每一次&#34;用\。我真的不明白为什么它不工作,这开始让我发疯...
答案 0 :(得分:4)
您需要2层转义序列。您需要为c#
转义一次,并再次转义正则表达式语法。
如果您想要转义正则表达式的字符也必须转义\
,那么您应该在正则表达式级别将转义序列的\
更改为\\
答案 1 :(得分:2)
对字符串中的每个\使用两个\。不计算你已经为报价做的逃避。因为\是一个转义字符。看起来主要与&#34; \ n&#34;发生了3次。
原始字符串:
"product clearfix">\n+<div class="img">\n+<a href="(.*?)">\n+<img class="lazyload" id='.*' data-original="(.*?)" alt=".*" title="(.*?)" \/
此外,您可以将其分解为多行。 c#忽略空格,所以只需关闭引号并添加&#34; +&#34;到最后一行,继续从另一个引号开始。
C#String:
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="(.*?)" \/>
如果你仍然有问题,可能还有其他错误,可能在RegEx.Match(mainPage,ItemPattern)中。根据您所做的调试,听起来字符串已成功创建,并且没有MatchCollection。所以,无论是你如何获得比赛,还是参考比赛。