2015-07-17 4 views
1

Я получил очень неприятную строку, которая выглядит следующим образом (не actal вынесенного HTML, но строке):Обрезать строку до и после определенных символов

<div class='isc-content-block' data-contentmanagerid='60dd19b0-e3ba-4629-935c-a2dd00e052b8' data-contentmanagername='Product: B456009805'>456009806</div> 

Мне нужно, чтобы получить значение, число, показанное как «456009806». Каким будет лучший способ обрезать эту строку, чтобы удалить теги, так что все, что осталось, это номер внутри?

+1

Лучшим способом разбора HTML является использование 'HtmlAgilityPack'. Тогда это просто: 'doc.DocumentNode.SelectSingleNode (" // div [@ class = 'isc-content-block'] "). InnerText;' –

+0

Согласен. HtmlAgilityPack лучше всего подходит для разбора HTML-тегов! – Halcyon

+1

Если это всегда будет выглядеть так, то просто удалите все между < and >, и вы получите номер. Вы можете сделать это с помощью регулярного выражения. –

ответ

3

Нет зависимости от третьей стороны от этого решения. Если вы каждый раз знаете формат HTML, и это не для очень сложной процедуры, используйте простое Regex и соответствующим образом настройте.

Простое решение:

var result = Regex.Match("<div class='isc-content-block' data-contentmanagerid='60dd19b0-e3ba-4629-935c-a2dd00e052b8' data-contentmanagername='Product: B456009805'>456009806</div>", ">(.*)</.*>"); 

result.Groups[1].Value 

Даст вам:

456009806 

UPDATE:

Кроме того, работает несколько тестов с подстроки, стандартные Regex и Составитель регулярное выражение довольно удивительно. Пытался изо всех сил, чтобы получить точные результаты с кодом разгона джиттера и использовать тики от StopWatch.

Gist for Linqpad

Вот картина результатов:

Results from Linqpad with /o+ compiler flag enabled

+0

+1 для этого. Некоторые люди быстро увольняют регулярное выражение в качестве кувалды, используемой для хирургии мозга, но иногда это правильный инструмент для работы! – Equalsk

+0

@Equalsk и с скомпилированным регулярным выражением, чего еще вы хотели? : D –

0
var str = @"<div class='isc-content-block' data-contentmanagerid='60dd19b0-e3ba-4629-935c-a2dd00e052b8' data-contentmanagername='Product: B456009805'>456009806</div>"; 

Regex regex = new Regex("<.*?>"); 
var justnumstr = regex.Replace(str, string.Empty); 

Это приведет к justnumstr, содержащий строку 456009806

1

RegEx это, или если вы в спешке:

// Assuming s is your string 
string result = s.Substring(s.IndexOf(">") + 1).Replace("</div>", string.Empty); 

Надеется, что это помогает;)

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