Регулярные выражения - чистка мусора

  • Автор темы Автор темы aluminoter
  • Дата начала Дата начала

aluminoter

Client
Регистрация
11.02.2015
Сообщения
254
Реакции
40
Баллы
28
Помогите отчистить контент от мусора, от не нужных тегов в тексте.

Имею вот что:
Код:
Развернуть Свернуть Копировать
//    -------------------------------------------------------------  //
//    Получаем content статьи;
//    -------------------------------------------------------------  //
   
//    Шаблон регулярного выражения;   
    pattern = @"(?<=<div\ id=""contentleft"">)[\w\W]*?(?=</div>)";
    rgx = new Regex(pattern);
   
//    Контент статьи;
    var content = rgx.Match(article, 0);
   
//    Чистим от мусора;
    content = ..... (удалить теги h1)
    content = ..... (удлаить теги ..)
    content = ..... (удлаить теги ..)
Есть переменная
PHP:
Развернуть Свернуть Копировать
content
в которой находится мой контент, и мне надо убрать множественные конструкции которые мне просто не нужны.

Подскажите наиболее подходящий способ придать множественной обработке с помощью Replace либо как то еще???
 
Последнее редактирование:
все теги можно убрать с помощю <[^>]+>
 
все теги можно убрать с помощю <[^>]+>

Мне не надо все удалять, мне надо сохранить все параграфы, фото и тд.
Мне надо избавиться от определенных тегов.

Как мне применить Replace множественный, просто я плохо язык знаю, и не знаю как граммотно к переменной content сделать множественные Replace
 
Мне надо чтобы в переменную content шла перезапись множественная, ниужели мне надо создать множество экземпляров класса Regex??
 
content = Regex.Replace(content, "<[^>]+>", ""); исправил
экземпляры Regex создаются только в случае множественного обращения к ним, в вашем случае это делать не нужно.
var content = rgx.Match(article, 0); - неправильно
var content = rgx.Match(article).Value; - правильно
 
Последнее редактирование:
content = Regex.Replace(content, "<[^>]+>");
экземпляры Regex создаются только в случае множественного обращения к ним, в вашем случае это делать не нужно.
var content = rgx.Match(article, 0); - неправильно
var content = rgx.Match(article).Value; - правильно


Код:
Развернуть Свернуть Копировать
content = Regex.Replace(content, "h1", string.Empty);

А мне выдает:

Код:
Развернуть Свернуть Копировать
Тип    Время    Сообщение
    21:13:11    Компиляция кода  Ошибка в действии "CS1502" "Наиболее подходящий перегруженный метод для "System.Text.RegularExpressions.Regex.Replace(string, string, string)" имеет несколько недопустимых аргументов". [Строка: 63; Cтолбец: 12]
Код:
Развернуть Свернуть Копировать
Тип    Время    Сообщение
    21:13:11    Компиляция кода  Ошибка в действии "CS1503" "Аргумент "1": преобразование типа из "System.Text.RegularExpressions.Match" в "string" невозможно". [Строка: 63; Cтолбец: 26]
 
А почему так не правильно??
Код:
Развернуть Свернуть Копировать
var content = rgx.Match(article, 0);

Я просто работаю по подсказкам в коде и мне выдает что есть такой вариант:
Код:
Развернуть Свернуть Копировать
Match Regex.Match (string input, int startat)

Я так понял что startat это номер совпадения.
 
делайте как хотите, лишь бы у вас оно работало )
почему бы я так не делал: если совпадений не будет то вызовется исключение. так что учтите этою. хотя нет, не вызывает )
 
Последнее редактирование:
Если бы у меня все работало, писал бы я сюда.

Код:
Развернуть Свернуть Копировать
//    -------------------------------------------------------------  //
//    Получаем content статьи;
//    -------------------------------------------------------------  //
   
//    Шаблон регулярного выражения;   
    pattern = @"(?<=<div\ id=""contentleft"">)[\w\W]*?(?=</div>)";
    rgx = new Regex(pattern);
   
//    Контент статьи;
    var content = rgx.Match(article).Value;
   
//    Чистим от мусора;
    content = Regex.Replace(content, @"<h1>", string.Empty);

Все отрабатывает но h1 не удаляет.
 
Все работает, это я просто торможу.
 
Вот только я не понимаю зачем нужно объявлять вот такую конструкцию, если и без нее все работает на ура.

Код:
Развернуть Свернуть Копировать
var rnd_new = new Regex();

Код:
Развернуть Свернуть Копировать
Без объявления все работает??????
var content = Regex.Match(...);
var content = Regex.Replace(....);
 
Последнее редактирование:
Я прочитал что объявлять нужно только те классы в которых статические методы а не обычные.
А сдесь видно в using прописан класс Text.RegularExpressions.
Потому наверное и не надо объявлять их черех new.

Кто в курсе, просветите если можете.
 
Вот так у меня все прекрасно работает:

Код:
Развернуть Свернуть Копировать
//    -------------------------------------------------------------  //
//    Title статьи;
//    -------------------------------------------------------------  //
       
    var pattern = @"(?<=rel=""bookmark"">).*?(?=</a></h1>)";
    var title = Regex.Match(article, pattern).Value;
   
   
//    -------------------------------------------------------------  //
//    Content статьи;
//    -------------------------------------------------------------  //
   
    pattern = @"(?<=<div\ id=""contentleft"">)[\w\W]*?(?=</div>)";
    var content = Regex.Match(article, pattern).Value;
    return content;
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)