Каков наилучший способ поиска в HTML в строке C # определенного текста и пометки текста? - PullRequest
5 голосов
/ 19 января 2009

Каков наилучший способ поиска по HTML внутри строковой переменной C #, чтобы найти конкретное слово / фразу и пометить (или перенести) это слово / фразу выделением?

Спасибо

Jeff

Ответы [ 6 ]

8 голосов
/ 30 июля 2009

Мне нравится использовать Html Agility Pack , очень прост в использовании, хотя в последнее время обновлений не так много, он все еще пригоден для использования. Например, захватить все ссылки

HtmlWeb client = new HtmlWeb();
HtmlDocument doc = client.Load("http://yoururl.com");            
HtmlNodeCollection Nodes = doc.DocumentNode.SelectNodes("//a[@href]");         

foreach (var link in Nodes)
{                
    Console.WriteLine(link.Attributes["href"].Value);
}
1 голос
/ 19 января 2009

Вы можете посмотреть на использование HTML DOM , проекта с открытым исходным кодом на SourceForge.net. Таким образом, вы можете программно манипулировать вашим текстом, а не полагаться на регулярные выражения.

1 голос
/ 19 января 2009

В простых случаях подойдут регулярные выражения.

string input = "ttttttgottttttt";
строка output = Regex.Replace (input, "go", " $ 0 ");

даст: "tttttt go ttttttt"

Но когда вы говорите HTML, если вы имеете в виду окончательный отрисованный текст, это немного беспорядок. Скажем, у вас есть этот HTML:

B ook

Чтобы выделить слово «Книга», вам понадобится помощь правильного HTML-рендерера. Для упрощения можно сначала удалить все теги и оставить только содержимое, а затем выполнить обычную замену, но это не так.

1 голос
/ 19 января 2009

Если HTML-код, который вы используете, совместим с XHTML, вы можете загрузить его как документ XML, а затем использовать XPath / XSL - многословно, но довольно элегантно?

Подход, который я использовал в прошлом, заключается в том, чтобы использовать HTMLTidy для преобразования грязного HTML в XHTML, а затем использовать XSL / XPath для очистки содержимого экрана в базе данных, чтобы создать обратную систему управления содержимым.

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

1 голос
/ 19 января 2009

Регулярное выражение будет моим способом. ;)

0 голосов
/ 19 января 2009

Ища строки, вы захотите посмотреть регулярные выражения. Что касается маркировки, то, когда у вас есть положение подстроки, оно должно быть достаточно простым, чтобы добавить что-то, чтобы обернуть фразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...