Я прочитал html-файл как строковый builder.Now я хочу поставить якорный тег между h1, h2 и h3 и дать разные ссылки id и href. Итак, как я могу достичь этого. Я хочу, чтобы что-то делать. Я пробовал Sb.Replace("<h1>", "<h1> <a id=1>");
, но я не могу дать uniqe Id привязке к тегу. Так как я могу читать все h1, h2 и h3 и помещать тег привязки и давать уникальный идентификатор привязному тегу.StringBuilder найти строку читать и заменять
ответ
Вы можете позвонить Regex.Replace
в пространство имен System.Text.RegularExpressions
и определить настраиваемый обратный вызов MatchEvaluator
, где вы назначаете новые идентификаторы.
Что-то вроде следующего:
var regHeaders = new Regex(@"<(?<close>/)?h(?<header>\d)\s*>", RegexOptions.Compiled | RegexOptions.IgnoreCase);
var replaced = regHeaders.Replace(sb.ToString(), new MatchEvaluator(EvaluateHeaders));
И определить EvaluateHeaders обратного что-то вроде этого:
private static string EvaluateHeaders(Match m)
{
bool closeTag = m.Groups["close"].Success;
switch (int.Parse(m.Groups["header"].Value))
{
case 1: // h1
return closeTag ? "</a></h1>" : "<h1><a href=\"header1\">Header1";
// todo: your own implementation of the various other headers.
default:
return m.Value;
}
}
EDIT
В свете Вашего последнего комментария, я изменил код к следующему:
var regHeaders = new Regex(@"<h(?<header>\d)\s*>(?<content>.+?)</h\1>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
var replaced = regHeaders.Replace(sb.ToString(), EvaluateHeaders);
private static string EvaluateHeaders(Match m)
{
switch(int.Parse(m.Groups["header"].Value))
{
case 1: // <h1>content</h1>
return string.Format("<h1><a href=\"#\" id=\"{0}\">{0}</a><h1>", m.Groups["content"].Value);
default:
return m.Value;
}
}
Спасибо, что ответили, что он работает отлично, но как я могу дать уникальный идентификатор каждому тегу привязки. – Hitesh
В каком формате должны быть идентификаторы? –
- 1. Как читать и заменять строку в файле в VB?
- 2. StringBuilder - читать N символов
- 3. Как читать и заменять данные конфигурации в Perl
- 4. StringBuilder подсчитывать запятая и найти позицию
- 5. StringBuilder и сравнивает исходную и отмененную строку
- 6. Как обрезать строку StringBuilder?
- 7. Повторяя строку, используя StringBuilder
- 8. Добавить строку, используя StringBuilder
- 9. Пропустить строку и stringbuilder между действиями
- 10. как читать содержимое файла html и заменять с помощью php
- 11. как читать html-файл и заменять нашими символами
- 12. Как я могу читать, заменять и писать очень большие файлы?
- 13. Пакетный файл: как искать и заменять строку с «=» внутри
- 14. Удалить строку соответствия из StringBuilder
- 15. Java: Удалить строку из StringBuilder
- 16. Как найти значения в строке, манипулировать и заменять их
- 17. Как мне искать строку для определенных символов и заменять их?
- 18. Как читать или заменять сразу несколько строк файла?
- 19. Как получить строку строки StringBuilder?
- 20. StringBuilder: как получить финальную строку?
- 21. Stringbuilder и массивы
- 22. Java: Найти и заменить строку
- 23. StringBuilder append и Listbox
- 24. Поиск строки в StringBuilder и заменить всю строку C#
- 25. найти заменять имя по приоритету источника (python)
- 26. Рекурсивно копировать и заменять файл
- 27. StringBuilder и For Loop
- 28. StringBuilder и CharSequence несовместимы
- 29. UNIX: как искать и заменять строку с помощью самой функции
- 30. regex искать и заменять переменную строку, включая оператор regex
Вы не можете сделать это одним ударом. Возможно, лучше использовать RegEx, а затем выполнить замену 1 за раз и увеличить ваши идентификаторы. – lahsrah
Спасибо, но Как я могу найти все h1, h2 и h3 из stringbuilder? – Hitesh
[HtmlAgilityPack] (http://htmlagilitypack.codeplex.com/) –