2016-03-05 29 views
0

我在C#中使用正則正則表達式,並具有以下字符串:如何獲得具體內容(正則表達式C#)

<tr> 
<td class="uk-text-bold">Hello</td> 
</tr> 
<tr> 
<td class="uk-text-bold">World</td> 
</tr> 

使用此模式:
<td class=\"uk-text-bold\">(.+?)</td>

我試圖讓只是「你好」和「世界」,所以括號內的所有內容,但它不斷返回全線,我卡住了。

我可以得到一些建議嗎?

正則表達式here

在此先感謝。

+0

不要使用正則表達式,使用HtmlAgilityPack或類似的東西。 –

回答

1

你的表情沒問題。因此,如果您真的需要使用正則表達式,我建議您使用已命名的組而不是已編號的組,然後遍歷匹配並處理該已命名的組。例如:

var pattern = @"<td class=\""uk-text-bold\"">(?<mostwanted>.+?)</td>"; 
var input = @"<tr> 
<td class=""uk-text-bold"">Hello</td> 
</tr> 
<tr> 
<td class=""uk-text-bold"">World</td> 
</tr>"; 

var regex = new Regex(pattern, RegexOptions.Multiline); 

var matches = regex.Matches(input); 

foreach (var mostwanted in matches 
    .Cast<Match>() 
    .Select(t1 => t1.Groups["mostwanted"].Value)) 
{ 
    Console 
    .WriteLine(mostwanted); 
} 

但是,正如其他人所說的,更好的方法是使用一些html解析器(HtmlAgilityPack非常好)。因爲,如果你的html代碼將包含標籤之間的空格或者會有一些不需要的回報,你的正則表達式將被打破。

+0

他正在使用的編號組同樣適用;他只需要知道如何訪問它。此外,沒有要求'Multiline'選項。它所做的只是將錨點('^'和'$')的含義從整個字符串邊界改爲行邊界,並且在正則表達式中沒有錨點。 –

1

一旦你有Match m,使用m.Groups[1].Value而不是m.Value。每對括號定義一個新組。

但是,要告訴你應該如何真的做到這一點,請使用HTML解析庫來解析HTML,而不是正則表達式。