Как в тексте проверить наличие ключевых слов

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

sof

Client
Регистрация
15.04.2013
Сообщения
831
Реакции
185
Баллы
43
Есть текст который я с помощью регулярки вытянул со страницы, положил ее в переменную и мне нужно этот текст проверить на наличие определенных слов. Как это сделать по умному? Если можно скрином покажите.
 
Операции с текстом - Regex ))
(Слово1|слово2|слово3) если нужно найти любое
 
А еще умнее сплитнуть текст по пробелам, привести к простой форме попутно удаляя союзы и частицы и уже по этому списку искать вхождения)
 
У меня почему то логика не срабатывает правильно. Даже если пишет в логе ничего не найдено, то все равно идет по успешной ветке
 
Не знаю что вы делаете :bn:
 
Не знаю что вы делаете :bn:
хрень.JPG
 

Все правильно, после regex нужно добавить экшн "логика" в котором прописать '{-Variable.minus_obr-}'!='' (здесь одиночные кавычки используются, можно и обычные двойные), положительный выход будет "Есть такое слово", отрицательный "Нет слова"
 
  • Оценить
Реакции: sof
Как уж вы с 2013 года регистрации не знаете что Regex всегда успешен))
 
Операции с текстом - Regex ))
(Слово1|слово2|слово3) если нужно найти любое

А как сделать чтоб он не был чувствителен к регистру?

У меня слова которые я ищу в тексте попадется с большой буквы или все буквы большие, и чета Regex их не находит.
 
А как сделать чтоб он не был чувствителен к регистру?

У меня слова которые я ищу в тексте попадется с большой буквы или все буквы большие, и чета Regex их не находит.
парсинг текста без учета регистра..

(?i)Агентам не звонить

спарсятся все варианты: Агентам не звонить, агентам не звонить, АГЕНТАМ НЕ ЗВОНИТЬ
 
  • Оценить
Реакции: QWER-MAS
парсинг текста без учета регистра..

(?i)Агентам не звонить

спарсятся все варианты: Агентам не звонить, агентам не звонить, АГЕНТАМ НЕ ЗВОНИТЬ


Покажи пример на этом (Слово1|слово2|слово3|слово4)

А то я не понял куда ето вставить.
 
  • Оценить
Реакции: QWER-MAS
Подскажите пожалуйста: в переменной слово"кофемашина", делаю проверку regexp по ключу "кофе" на находит. Может регулярка какая нужна? Ну типа если до или после есть символы, то ответ положительный
 
ключ.*? не прокатывает тоже. В конструкторе прокатывает, а в кубике нет111111.png
 
Последнее редактирование:
регуляркой так
C#:
Развернуть Свернуть Копировать
string text = "Подскажите пожалуйста: в переменной слово\"кофемашина\", делаю проверку regexp по ключу \"кофе\" на находит. Может регулярка какая нужна? Ну типа если до или после есть символы, то ответ положительный";//Текст, где ищем
string seekstr = "делаю проверку";//Текст, который ищем
//string regex = "(?i)("+seekstr+")";//составляем сложную регулярку с подстановкой переменной в поиск
string regex = seekstr;//обычный поиск текста
Match str = Regex.Match(text,regex);//ищем
if(str.Success) return 0;//если нашли, выход по зеленой ветке
else throw new Exception("Не найдено");//если нет, по красной
или проще, как мне кажется
C#:
Развернуть Свернуть Копировать
string text = "Подскажите пожалуйста: в переменной слово\"кофемашина\", делаю проверку regexp по ключу \"кофе\" на находит. Может регулярка какая нужна? Ну типа если до или после есть символы, то ответ положительный";//Текст, где ищем
string seekstr = "делаю проверку";//Текст, который ищем
if(text.Contains(seekstr)) return 0;//если нашли, выход по зеленой ветке
else throw new Exception("Не найдено");//если нет, по красной
 
  • Оценить
Реакции: kolina
ключ.*? не прокатывает тоже. В конструкторе прокатывает, а в кубике нетПосмотреть вложение 65782

У тебя разный регистр букв, поэтому он и не находит "кофе" в "Кофемашина". Тут два варианта решения задачи:
1) В Regex включить функцию не учитывать регистр это делается просто, перед нужным словом ставишь "(?i)" без ковычек.
2) Преобразовать все символы в нижний регистр.

Можешь воспользоваться вот таким снипетом с#
C#:
Развернуть Свернуть Копировать
return Convert.ToString(Regex.Matches("кофемашина","(?i)кофе").Count);

Вместо кофемашина нужно будет вставить свою переменную. Если есть совпадения он вернет значение выше 0, если нет, то соотвественно 0
 
  • Оценить
Реакции: kolina
У тебя разный регистр букв, поэтому он и не находит "кофе" в "Кофемашина". Тут два варианта решения задачи:
1) В Regex включить функцию не учитывать регистр это делается просто, перед нужным словом ставишь "(?i)" без ковычек.
2) Преобразовать все символы в нижний регистр.

Можешь воспользоваться вот таким снипетом с#
C#:
Развернуть Свернуть Копировать
return Convert.ToString(Regex.Matches("кофемашина","(?i)кофе").Count);

Вместо кофемашина нужно будет вставить свою переменную. Если есть совпадения он вернет значение выше 0, если нет, то соотвественно 0
Спасибо за ответы. Но всё таки хотел понять почему не отрабатывает так как я хочу. Регистр одинаковый, так как я переменную Zaglavie привожу к нижнему регистру, а уже потом пытаюсь найти. Хочу разобраться, что бы потом не чпокаться ещё раз
222222.png
 
  • Оценить
Реакции: Dimson и kolina
Проверьте еще раз, возможно в переменной Kluch у вас есть конечный пробел.

Посмотреть вложение 65798
Всё получилось. Переменную Kluch пропустил через Trim. Видимо когда список ключей из переменной ложу в список, визуально не видно пробел, а он есть. Может в другом дело. Но решение найдено. Спасибо!
 
  • Оценить
Реакции: Sergodjan
Проверьте еще раз, возможно в переменной Kluch у вас есть конечный пробел.
А как искать только целое слово? использую (?i)Cap все отлично работает распознает большие маленькие буквы. если будет слово Capmonstr все равно находит слово cap.
 
А как искать только целое слово? использую (?i)Cap все отлично работает распознает большие маленькие буквы. если будет слово Capmonstr все равно находит слово cap.
Почитай о модификаторе \b
 

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