2017-06-15 73 views
0

我有一個字符串:如何使用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

你能給我所有的字符串嗎? –

回答

2

您可以使用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

1
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]; 

我希望它會爲你工作。

0
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(); 
0
  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,你很好去。

0

好日子維奇

這可能不是你要找的解決方案,但它一定會提供許多幫助之一。

我會用這個正則表達式來提取所有標籤

(<\/[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元素,並不完全知道自我關閉標記的結果。 –