2011-12-22 5 views
0

У меня есть строка, имеющая такая форма:Получить информацию от сНа тега

<div class="c1">text1</div></br> 
<div class="c2">text2</div></br> 
<div class="c3">text3</div></br> 

Я хочу создать NameValueCollection с C# и регулярных выражениями, как этого

{ ("c1","text1"),("c2","text2"),("c3","text3") }. 

Прямо сейчас я могу получить только «текст», как это

Match match = Regex.Match(inputString, "[^<>]+(?=[<])"); 

Может кто-то помочь мне получить как class и innertext?

Благодаря

+0

как о «[^ \ d] * \ d *» – Daniel

+3

Большая библиотека для работы с HTML в C# является http://htmlagilitypack.codeplex.com/, если вы можете использовать что-то подобное , –

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – adt

ответ

2

Я согласен о маневренности пакете, но это отвечает на ваш вопрос. Шаблон прокомментирован, а результат совпадений помещен в словарь для легкого извлечения. НТН

string data = @" 
<div class=""c1"">text1</div></br> 
<div class=""c2"">text2</div></br> 
<div class=""c3"">text3</div></br> 
"; 

string pattern = @" 
(?:class\=\x22) # Match but don't capture the class= quote 
(?<Key>\w+)  # Get the key value 
(?:\x22>)  # MBDC the quote and > 
(?<Value>[^<]+) # Extract the text into Value named capture group 
"; 

// Ignore allows us to comment the pattern; it does not affect regex processing! 
Regex.Matches(data, pattern, RegexOptions.IgnorePatternWhitespace) 
    .OfType<Match>() 
    .ToDictionary (mt => mt.Groups["Key"], mt => mt.Groups["Value"]) 
    .ToList() 
    .ForEach(kvp => Console.WriteLine ("Key {0} Value {1}", kvp.Key, kvp.Value)); 

/* Output 
Key c1 Value text1 
Key c2 Value text2 
Key c3 Value text3 
*/ 
+0

OP сменил текст на HTML. Это была оригинальная картина. – OmegaMan

+0

Обновлено, чтобы отразить новые данные. – OmegaMan

+1

На самом деле это всегда был HTML, но теги исчезли, потому что OP не смог использовать форматирование кода. Хороший ответ! –

Смежные вопросы