RegEx соответствия HTML-теги и извлечения текста - PullRequest
7 голосов
/ 18 ноября 2008

У меня есть строка теста, подобная этой:

<customtag>hey</customtag>

Я хочу использовать RegEx для изменения текста между тегами «customtag», чтобы он мог выглядеть следующим образом:

<customtag>hey, this is changed!</customtag>

Я знаю, что могу использовать MatchEvaluator для изменения текста, но я не уверен в правильном синтаксисе RegEx для использования. Любая помощь будет высоко ценится.

Ответы [ 5 ]

15 голосов
/ 18 ноября 2008

Я бы тоже не использовал для этого регулярное выражение, но если вам нужно, это выражение должно работать: <customtag>(.+?)</customtag>

7 голосов
/ 18 ноября 2008

Я бы потрепал свою ногу перед тем, как использовать регулярное выражение для разбора и изменения HTML.

Используйте XSL или DOM .


Два комментария попросили уточнить. Подстановка регулярного выражения работает в конкретном случае в вопросе OP, но в целом регулярные выражения не являются хорошим решением. Регулярные выражения могут соответствовать регулярным языкам , то есть последовательности ввода, которая может быть принята конечным автоматом. HTML может содержать вложенные теги любой произвольной глубины, поэтому это не обычный язык.

Какое это имеет отношение к вопросу? Использование регулярного выражения для вопроса ОП в том виде, как оно написано, работает, но что, если содержимое между тегами <customtag> содержит другие теги? Что если в тексте встречается буквальный символ <? Прошло 11 месяцев с тех пор, как Джон Такабери задал вопрос, и я думаю, что за это время сложность его проблемы могла увеличиться.

Регулярные выражения - отличные инструменты, и я использую их постоянно. Но использование их вместо реального парсера для ввода, которое нужно, будет работать только в очень простых случаях. Практически неизбежно, что эти случаи выходят за рамки возможностей регулярных выражений. Когда это произойдет, у вас возникнет желание написать более сложное регулярное выражение, но оно быстро становится очень трудоемким для разработки и отладки. Будьте готовы отказаться от решения регулярного выражения при расширении требований к синтаксическому анализу.

XSL и DOM - это две стандартные технологии, разработанные для работы с разметкой XML или XHTML. Обе технологии знают, как анализировать файлы структурированной разметки, отслеживать вложенные теги и позволяют преобразовывать атрибуты тегов или содержимое.

Вот пара статей о том, как использовать XSL с C #:

Вот пара статей о том, как использовать DOM с C #:

Вот библиотека .NET, которая помогает операциям DOM и XSL с HTML:

1 голос
/ 19 ноября 2008

Если между этими двумя тегами не будет других тегов, это регулярное выражение будет немного безопаснее и эффективнее:

<customtag>[^<>]*</customtag>
0 голосов
/ 18 февраля 2012

Большинство людей используют Agility Pack для HTML-анализа текста. Тем не менее, я нахожу это немного надежным и сложным для собственных нужд. Я создаю элемент управления веб-браузера в памяти, загружаю страницу и копирую текст с нее. (см. пример ниже)

Вы можете найти 3 простых примера здесь:

http://jakemdrew.wordpress.com/2012/02/03/getting-only-the-text-displayed-on-a-webpage-using-c/

0 голосов
/ 20 мая 2010
//This is to replace all HTML Text

var re = new RegExp("<[^>]*>", "g");

var x2 = Content.replace(re,"");

//This is to replace all &nbsp;

var x3 = x2.replace(/\u00a0/g,'');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...