2014-01-24 5 views
0

У меня есть стена HTML кода от источника, и мне нужно, чтобы извлечь «1929485» от источникаC# Извлечение строки из стены текста

<input type="hidden" name="key" value="1929485" /> 

Как мне это сделать? нашел это онлайн:

var match = Regex.Match(source, @"class="""" onclick=""NewWindow\('([^']*)',\s*'([^']*)',.*"); 

Не знаете, что это все значит и делает?

Спасибо.

+4

Вы должны использовать парсер HTML (выберите один для своего языка, есть много удивительных), а не регулярное выражение, как соблазнительное, как оно есть. Это классический ответ на почему: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags#answer-1732454. С длинным HTML-файлом вы рискуете головокружительными ошибками, поскольку регулярное выражение не может полностью проанализировать HTML. – Robin

+0

Уже обречен в любом случае, научите меня своим путям! – user2911924

+1

См. HtmlAgilityPack. И это: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

ответ

0

Во-первых, используйте

pos = htmlstring.IndexOf("1929485") 

найти индекс, где подстрока. Удостоверьтесь, что нет ни одного другого экземпляра, или первое, что вы получите, возможно, не тот, который вам нужен.

Затем разверните до начала и до конца, пока вы не достигнете сладкое пятно, как это:

startpos = htmlstring.LastIndexOf("<input", pos); 
endpos = htmlstring.IndexOf("/>", pos) + 2; 

Затем извлечь всю вещь:

htmltag = htmlstring.Substring(startpos, endpos - startpos); 

Я мог бы быть от одного характер, просто экспериментируйте немного, чтобы соответствовать вашим потребностям.

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