Заменить содержимое HTML-тега с помощью Regex - PullRequest
3 голосов
/ 19 марта 2012

Я хочу зашифровать текстовое содержимое документа HTML без изменения его макета.Содержимое хранится в виде пар тегов, например: text_to_get .Моя идея - использовать Regex для получения (1) и замены каждой текстовой части зашифрованным текстом (2).Я завершаю шаг (1), но на шаге (2) возникают проблемы.Вот код, над которым я работаю:

private string encryptSpanContent(string text, string passPhrase, string salt, string  hash, int iteration, string initialVector, int keySize)        
{            
        string resultText = text;
        string pattern = "<span style=(?<style>.*?)>(?<content>.*?)</span>";   
        Regex regex = new Regex(pattern);
        MatchCollection matches = regex.Matches(resultText);          
        foreach (Match match in matches)    
        {                
            string replaceWith = "<span style=" + match.Groups["style"] + ">" + AESEncryption.Encrypt(match.Groups["content"].Value, passPhrase, salt, hash, iteration, initialVector, keySize) + "</span>";                
            resultText = regex.Replace(resultText, replaceWith);
        }
        return resultText;
}

Это неправильная строка (заменяет все тексты последним значением replaceWith)?

            resultText = regex.Replace(resultText, replaceWith);

Может кто-нибудь помочь?мне это исправить?

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

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

Если ваш HTML правильно сформирован и вы решили использовать регулярное выражение, вам следует использовать Regex.Replace метод , который принимает MatchEvaluator для замены всех вхождений.

Попробуйте этот подход:

string input = @"<div><span style=""color: #000;"">hello, world!</span></div>";
string pattern = @"(?<=<span style=""[^""]+"">)(?<content>.+?)(?=</span>)";
string result = Regex.Replace(input, pattern,
    m => AESEncryption.Encrypt(m.Groups["content"].Value, passPhrase, salt, hash, iteration, initialVector, keySize));

Здесь я использую выражение lambada для MatchEvaluator и ссылаюсь на группу «content», как показано выше. Я также использую осмотры для тегов span, чтобы избежать необходимости включать их в шаблон замены.

0 голосов
/ 17 августа 2012

Вот простое решение для замены тегов HTML

string ReplaceBreaks(string value)
{
    return Regex.Replace(value, @"<(.|\n)*?>", string.Empty);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...