Регулярное выражение для удаления всего между тегами привязки - PullRequest
0 голосов
/ 19 января 2010

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

 string LINK_TAG_PATTERN = "/<a\b[^>]*>(.*?)<\\/a>";

 htmltext = Regex.Replace(htmltext, LINK_TAG_PATTERN, string.Empty);

Это не работает, у кого есть идеи, почему?

Большое спасибо,

Редактировать: регулярное выражение было по этой ссылке Извлечение текста и ссылок из HTML с использованием регулярных выражений

Ответы [ 5 ]

4 голосов
/ 19 января 2010

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

HTML Agiliity Pack

3 голосов
/ 19 января 2010

Проблемы в вашей строке: ненужная косая черта в начале (это синтаксис Perl), неэкранированная обратная косая черта (\b), ненужная экранированная обратная косая черта (\\).

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

string LINK_TAG_PATTERN = @"<a\b[^>]*>(.*?)</a>";
htmltext = Regex.Replace(htmltext, LINK_TAG_PATTERN, string.Empty, RegexOptions.IgnoreCase);

\b необходим для предотвращения совпадения других тегов, которые начинаются с a.

2 голосов
/ 19 января 2010
string LINK_TAG_PATTERN = @"(<a\s+[^>]*>)(.*?)(</a>)";

htmltext = Regex.Replace(htmltext, LINK_TAG_PATTERN, "$1$3", RegexOptions.IgnoreCase);
2 голосов
/ 19 января 2010

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

Вы можете использовать javascript для обхода дерева DOM вместо заменителей.

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

Концептуально это удаляет только ссылки особого вида (например, ваше регулярное выражение не соответствует верхнему регистру A, что совершенно правильно в HTML: <A ...>bla</A>. Замена не будет работать и для ссылок javascript. Является ли ваш код отношение к безопасности пользователя?

...