Извлечь части HTML с помощью регулярных выражений - PullRequest
0 голосов
/ 22 апреля 2010

У меня есть простое требование для извлечения текста в HTML.Предположим, что HTML равен

<h1>hello</h1> ... <img moduleType="calendar" /> ...<h2>bye</h2> 

Я хочу преобразовать его в три частитеги с

Ответы [ 3 ]

1 голос
/ 22 апреля 2010

Не делай этого; HTML может быть сломан многими красивыми способами. Вместо этого используйте красивый суп .

0 голосов
/ 23 апреля 2010

Я на самом деле пытаюсь сделать то же самое, что и компилятор asp.net, чтобы скомпилировать разметку в дереве управления сервером, регулярное выражение активно используется компилятором asp.net. У меня есть временное решение, хотя и не хорошее, но, кажется, все в порядке.

//string source = "<h1>hello</h1>";
string source = "<h1>hello<img moduleType=\"calendar\" /></h1> <p> <img moduleType=\"calendar\" /> </p> <h2>bye</h2> <img moduleType=\"calendar\" /> <p>sss</p>";
Regex exImg = new Regex("(.+?)(<img.*?/>)");

var match = exImg.Match(source);
int lastEnd = 0;
while (match.Success)
{
    Console.WriteLine(match.Groups[1].Value);
    Console.WriteLine(match.Groups[2].Value);
    lastEnd = match.Index + match.Length;
    match = match.NextMatch();
}
Console.WriteLine(source.Substring(lastEnd, source.Length - lastEnd ));


0 голосов
/ 22 апреля 2010

Это зависит от языка и контекста, который вы используете. Я делаю нечто похожее на моей CMS, мой подход - сначала найти теги, а затем атрибуты.

Получить теги

"<img (.*?)/>"

Затем я ищу в результатах для определенных атрибутов

'title="(.*?)"'

Если вы хотите найти все атрибуты, вы можете легко изменить явный заголовок на регулярное выражение [a-z] или непробельный символ, а затем просмотреть все эти результаты.

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