如何使用html表标签解析字符串?

问题描述:

我有一个字符串:如何使用html表标签解析字符串?

string s= "<tr><td>abc</td><td>1</td><td>def</td></tr><tr><td>aaa</td><td>2</td><td>bbb</td></tr>"; 

它看起来 - 格式如下:

<tr> 
    <td>abc</td> 
    <td>1</td> 
    <td>def</td> 
</tr> 
<tr> 
    <td>aaa</td> 
    <td>2</td> 
    <td>bbb</td> 
</tr> 

现在我想要得到的值 “1” 和 “2”,我该怎么办呢? 我已经尝试将其转换为XML,但没有成功。

+1

有效的XML文档必须具有单个根节点。转换前将字符串包装在一个字符串中。 –

+0

因为在该串具有一定的符号

​​1​​abc​​1​​的 XXXX xxxx​​def – Brom
+0

你能给我所有的字符串吗? –

您可以使用HTML Agility Pack.实现这一

HtmlDocument doc = new HtmlDocument(); 
doc.Parse(str); 

IEnumerable<string> cells = doc.DocumentNode.Descendants("td").Select(td => td.InnerText); 
+0

我使用.net框架2.0,也许它不支持此 – Brom

+0

非常感谢你! – Brom

string s = "<tr><td>abc</td><td>1</td><td>def</td></tr><tr><td>aaa</td><td>2</td><td>bbb</td></tr>"; 
s = s.Replace("<tr>","").Replace("</tr>","").Replace("</td>",""); 
string[] val = s.Split(new string[] { "<td>" }, StringSplitOptions.None); 

string one = val[2]; 
string two = val[5]; 

我希望它会为你工作。

Regex regex = new Regex("<td>(.*?)<\\/td>"); 
var maches = regex.Matches("<tr><td>abc</td><td>1</td><td>def</td></tr><tr><td>aaa</td><td>2</td><td>bbb</td></tr>"); 
var values = maches.Cast<Match>().Select(m => m.Groups[1].Value).ToList(); 

  string s = "<tr><td>abc</td><td>1</td><td>def</td></tr><tr><td>aaa</td><td>2</td><td>bbb</td></tr>"; 

      var regexPunctuation = s; 
      while (regexPunctuation != "") 
      { 
       regexPunctuation = System.Text.RegularExpressions.Regex.Match(s, @"\d+").Value; 
       s = s.Substring(s.IndexOf(regexPunctuation)+regexPunctuation.Length); 
       MessageBox.Show(regexPunctuation); 
      } 

正则表达式的每个号码相匹配的字符串和while循环经过所有的人。做什么你想要的MessageBox.Show intead,你很好去。

好日子维奇

这可能不是你要找的解决方案,但它一定会提供许多帮助之一。

我会用这个正则表达式来提取所有标签

(<\/[a-z]*>)+(<[a-z]*>)+|(<[a-z]*>)+(<\/[a-z]*>)+|(<[a-z]*>)+|(<\/[a-z]*>)+ 

例子:

string input = "<tr><td>abc</td><td>1</td><td>def</td></tr><tr><td>aaa</td><td>2</td><td>bbb</td></tr>"; 
    string replacement = "#"; 

    string pattern = "(<\/[a-z]*>)+(<[a-z]*>)+|(<[a-z]*>)+(<\/[a-z]*>)+|(<[a-z]*>)+|(<\/[a-z]*>)+"; 

    RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Compiled | 
    RegexOptions.Multiline; 

    Regex rgx = new Regex(pattern, options); 

    string result = rgx.Replace(input, replacement); 
    // result == "#abc#1#def#aaa#2#bbb#" 

这正则表达式将抓住的标签,团体或个人,然后你可以用更换分隔符行管道“|”或“#”并在其上分开。 我希望这可以帮助。

亲切的问候

Ps。正则表达式解释: 管道用作或运营商

(<\/[a-z]*>)+(<[a-z]*>)+ // Closing tag(s) that are followed by opening tag(s) 
(<[a-z]*>)+(<\/[a-z]*>)+ // Opening tags followed by closing tags 
(<[a-z]*>)+ // one or more opening tags 
(<\/[a-z]*>)+ // one or more closing tags  
+0

也只是提到这个正则表达式可以处理任何和所有的html/xml元素,并不完全知道自我关闭标记的结果。 –