正则表达式从C#中的字符串中提取所需的数据

时间:2018-08-29 03:53:32

标签: c# regex

我有一个网页。如果查看页面的“视图源”,则会发现以下语句的多个实例:

<td class="my_class" itemprop="main_item">statement 1</td>
<td class="my_class" itemprop="main_item">statement 2</td>
<td class="my_class" itemprop="main_item">statement 3</td>

我想这样提取数据:

statement 1
statement 2
statement 3

为此,我制作了一种方法“ GetContent ”,该方法以“ URL”作为参数,并将网页源的所有内容复制到C#字符串中。

private string GetContent(string url)
{
    HttpWebResponse response = null;
    StreamReader respStream = null;

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Timeout = 100000;
    response = (HttpWebResponse)request.GetResponse();
    respStream = new StreamReader(response.GetResponseStream());
    return respStream.ReadToEnd();
}

现在,我想创建一个方法“ GetMyList ”,该方法将提取我想要的列表。我正在寻找可能适合我的目的的正则表达式。我们非常感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

使用HTML AgilityPack,这真的很容易...

  HtmlDocument doc= new HtmlDocument ();
  doc.LoadHtml(html);
  //var nodes = doc.DocumentNode.SelectNodes("//td//text()");
  var nodes = doc.DocumentNode.SelectNodes("//td[@itemprop=\"main_item\"]//text()");
  var list = new List<string>();
            foreach (var m in nodes)
            {
                list.Add(m.InnerText);
            }

但是,如果您想要Regex,请尝试以下操作:

            string regularExpressionPattern1 = @"<td.*?>(.*?)<\/td>";
            Regex regex = new Regex(regularExpressionPattern1, RegexOptions.Singleline);
            MatchCollection collection = regex.Matches(html.ToString());
            var list = new List<string>();
            foreach (Match m in collection)
            {
                list.Add( m.Groups[1].Value);
            }

答案 1 :(得分:1)

Hosseins答案几乎是解决方案的方法(如果您可以选择的话,我建议您使用解析器),但是具有非捕获型括号?:的正则表达式将为您带来提取的数据{{1} }或statement 1

statement 2

有关详细说明,请参见regex101上的说明