регулярное выражение без учета регистра символов

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

progrlab

Client
Регистрация
07.02.2014
Сообщения
204
Реакции
82
Баллы
28
Есть текст из которого я хочу убрать (заменить) список слов.
В тексте эти слова могут быть в различном регистре.
Пробую вот такой регукляркой. Не получается.
(слово 1|слово 2| слово3)/i

Как можно было бы решить данную проблему ?
 
Спасибо за подсказку. Но при использовании данного регулярного выражения в экшене "Обработка текста - заменить".

Из следующего исходного текста :
"Давайте будем"

Получилось вот такое :
"*****Д*****а*****в*****а*****й*****т*****е***** *****б*****у*****д*****е*****м***** "

Что искать : (?i)(слово1| слово2| слово3)
На что заменить : *****
Включен радиобаттон - Regex
Что заменять : все.
Причем ни слово1, ни слово2, ни слово3 - в тексте не было.
Где я прокололся ?
 
Где-то ошиблись.
Прикладывайте семпл (шаблон из одного экшена демонстрирующий проблему) , а не текстовое описание проблемы.
 
Ок. скину сэмпл. Приготовлю и скину.

Пока проблему решил вот таким куском кода :

Код:
Развернуть Свернуть Копировать
// инициализация переменной
var result = " ";
// получаем список, в котором ключевые слова
var sourceList = project.Lists["censor_list"];
// подстрока для замены
var rstr = "***";
// берем из переменной текст, который надо заменить
var tmpStr = project.Variables["message1"].Value.ToLower();

// ищем строки из списка в тексте
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < sourceList.Count; i++)
    {
        // читаем строку из списка
        var str = sourceList[i];
        // замещаем все всхождения в строке
        result = tmpStr.Replace(str,rstr);
        tmpStr = result;
    }
}
// возвращаем результат
return result;

Он почти устраивает. Если бы не вот эта строка.
Весь исходный текст к нижнему регистру приводится :(
Код:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо заменить
var tmpStr = project.Variables["message1"].Value.ToLower();
 
Последнее редактирование:
Нужно убрать метод ToLower.
Код:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо заменить
var tmpStr = project.Variables["message1"].Value;
 
Нужно убрать метод ToLower.
Код:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо заменить
var tmpStr = project.Variables["message1"].Value;
Тогда я не смогу вычистить те слова, которые в другомрегистре.
Пример :
Список плохих слов : bad, verybad, very-bad
Текст : Bad, bla-bla-bla ! verybad .
В итоге :
verybad - уберется, а Bad - нет.
 
Семпл кидайте нерабочий со стандартным экшеном. Давайте там ошибку найдем.
 
Семпл кидайте нерабочий со стандартным экшеном. Давайте там ошибку найдем.
Спасибо. Я разобрался с нерабочим "стандартным экшеном". Попутно понял, что такой вариант мне не подходит.
И более подходит вариант с вышепреведенным куском кода на C# . Т.к. в этом случае я могу более гибко управлять списком плохих слов.
Осталось только решить проблему с приведением к регистру не всего текста. А его части.
Да и еще попутно нарыл моЩЩную регулярку. Такого монстра я еще не встречал. Она фильтрует нецензурные слова. Правда похоже только для однострочного варианта.

Вот она :

/\w{0,5}[хx]([хx\s\!@#\$%\^&*+-\|\/]{0,6})[уy]([уy\s\!@#\$%\^&*+-\|\/]{0,6})[ёiлeеюийя]\w{0,7}|\w{0,6}[пp]([пp\s\!@#\$%\^&*+-\|\/]{0,6})[iие]([iие\s\!@#\$%\^&*+-\|\/]{0,6})[3зс]([3зс\s\!@#\$%\^&*+-\|\/]{0,6})[дd]\w{0,10}|[сcs][уy]([уy\!@#\$%\^&*+-\|\/]{0,6})[4чkк]\w{1,3}|\w{0,4}[bб]([bб\s\!@#\$%\^&*+-\|\/]{0,6})[lл]([lл\s\!@#\$%\^&*+-\|\/]{0,6})[yя]\w{0,10}|\w{0,8}[её][bб][лске@eыиаa][наи@йвл]\w{0,8}|\w{0,4}[еe]([еe\s\!@#\$%\^&*+-\|\/]{0,6})[бb]([бb\s\!@#\$%\^&*+-\|\/]{0,6})[uу]([uу\s\!@#\$%\^&*+-\|\/]{0,6})[н4ч]\w{0,4}|\w{0,4}[еeё]([еeё\s\!@#\$%\^&*+-\|\/]{0,6})[бb]([бb\s\!@#\$%\^&*+-\|\/]{0,6})[нn]([нn\s\!@#\$%\^&*+-\|\/]{0,6})[уy]\w{0,4}|\w{0,4}[еe]([еe\s\!@#\$%\^&*+-\|\/]{0,6})[бb]([бb\s\!@#\$%\^&*+-\|\/]{0,6})[оoаa@]([оoаa@\s\!@#\$%\^&*+-\|\/]{0,6})[тnнt]\w{0,4}|\w{0,10}[ё]([ё\!@#\$%\^&*+-\|\/]{0,6})[б]\w{0,6}|\w{0,4}[pп]([pп\s\!@#\$%\^&*+-\|\/]{0,6})[иeеi]([иeеi\s\!@#\$%\^&*+-\|\/]{0,6})[дd]([дd\s\!@#\$%\^&*+-\|\/]{0,6})[oоаa@еeиi]([oоаa@еeиi\s\!@#\$%\^&*+-\|\/]{0,6})[рr]\w{0,12}/i
 
Последнее редактирование:
Что то странная. И что конкретно она должна отфильтровать?
 
Код:
Развернуть Свернуть Копировать
// получаем список, в котором ключевые слова
var sourceList = project.Lists["censor_list"];
// берем из переменной текст, который надо заменить
var tmpStr = project.Variables["message1"].Value;
// подстрока для замены
var rstr = "***";

// ищем строки из списка в тексте
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < sourceList.Count; i++)
    {
        // Regex.Replace
        var regex = new System.Text.RegularExpressions.Regex(@sourceList[i], System.Text.RegularExpressions.RegexOptions.IgnoreCase);
        tmpStr = regex.Replace(tmpStr, rstr);
    }
}
// возвращаем результат
return tmpStr;
В список можно кидать регулярки.
 
  • Оценить
Реакции: progrlab
В список можно кидать регулярки.
Спасибо за подсказку !
Я немного изменил ваш исходник и все заработало.
Изменения связаны с тем, что в редактируемом тексте может быть несколько вхождения стоп-слов. Надо заменить все.
Поэтому потребовалось сохранение промежуточного результата во временной переменной.
Теперь в тексте можно заменять слова, перечисленные в списке censor_list.
Код:
Развернуть Свернуть Копировать
// получаем список, в котором ключевые слова
var sourceList = project.Lists["censor_list"];
// берем из переменной текст, который надо заменить
var tmpStr = project.Variables["message1"].Value;
// подстрока для замены
var rstr = "***";
// инициализируем строку
var resStr = "";

// ищем строки из списка в тексте
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < sourceList.Count; i++)
    {
        // Regex.Replace
        var regex = new System.Text.RegularExpressions.Regex(@sourceList[i],
            System.Text.RegularExpressions.RegexOptions.IgnoreCase);
        resStr = regex.Replace(tmpStr, rstr);
        tmpStr = resStr;
    }
}
// возвращаем результат
return resStr;
 

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