簡體   English   中英

正則表達式從C#中的字符串中提取所需的數據

[英]Regex to extract required data from a string in C#

我有一個網頁。 如果查看頁面的“視圖源”,則會發現以下語句的多個實例:

<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 ”,它將提取我想要的列表。 我正在尋找可能適合我的目的的正則表達式。 非常感謝您的幫助。

使用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);
            }

Hosseins的答案幾乎是解決方案(如果您有此選擇,我建議您使用解析器),但是帶有不捕獲括號的正則表達式?:將根據需要將提取的數據statement 1statement 2帶給您:

IEnumerable<string> GetMyList(string str)
{
    foreach(Match m in Regex.Matches(str, @"(?:<td.*?>)(.*?)(?:<\/td>)"))
        yield return m.Groups[1].Value;
}

有關更多詳細說明 ,請參見regex101中的解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM