Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (25): В начало « 17 18 19 20 21 22 23 [24] 25 »   

> Описание: Поиск и замена текста по шаблонам регулярных выражений
Martin
Отправлено: 18 Мая, 2023 - 08:30:37
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 121
Дата рег-ции: Июнь 2022  
Репутация: 1




Как составить регулярное выражение чтобы оно находило фразу полностью в строке не реагируя на не нужные например мне нужно найти фразу "Я пошел в магазин" но оно так же найдет строку с содержанием
"Я пошел в магазин за молоком"

 Цитата:

Я пошел в магазин за яйцами
Я пошел в магазин за молоком
Я пошел в магазин
Я пошел в магазин за хлебом


к примеру чтобы из этого текста выделялось только строка Я пошел в магазин

(Отредактировано автором: 18 Мая, 2023 - 08:33:11)

 
 Top
Zireael
Отправлено: 18 Мая, 2023 - 11:20:42
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




CODE:
string Text = "Я пошел в магазин за молоком";
if(regexsearch(1, #Text, Text, "^Я пошел в магазин$"))messagebox("++++");
else messagebox("Не найдено");

Text = "Я пошел в магазин";
if(regexsearch(1, #Text, Text, "^Я пошел в магазин$"))messagebox("++++");
else messagebox("Не найдено");

^ - означает начало строки.
$ - конец строки.
 
 Top
Gorago
Отправлено: 18 Мая, 2023 - 12:16:32
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 34
Дата рег-ции: Май 2023  
Репутация: 0




Zireael , не работает со списком,
например копирую в буфер этот текст

 Цитата:
Я пошел в магазин за яйцами
Я пошел в магазин за молоком
Я пошел в магазин
Я пошел в магазин за хлебом


Запускаю код
CODE:
string Text;
sleep(100);
readclipboard(Text);
sleep(100);

if(regexsearch(1, #Text, Text, "^Я пошел в магазин$"))messagebox("++++");
else messagebox("Не найдено");


не находит
 
 Top
Zireael
Отправлено: 18 Мая, 2023 - 12:32:32
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
не работает со списком

Тут нет списка, есть многострочный текст.
CODE:
string Text;
readclipboard(Text);
messagebox(Text);
if(regexsearch(1, #Text, Text, "^Я пошел в магазин$", MULTILINE))messagebox("++++");
else messagebox("Не найдено");
 
 Top
Kibor
Отправлено: 17 Октября, 2023 - 19:45:33
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8095
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Доработал regexsearch

Можно в процессе поиска менять регулярное выражение и продолжать поиск с последней позиции найденного.

Функция может принимать разное количество параметров.

regexsearch(2, #P[0], T, R);
Первый - Сколько искать, или -1 если искать все
Второй - Указатель на массив string, в который запишутся найденные фрагменты текста
Третий - Текст в котором ищем.
Четвертый - Строка регулярного выражения

regexsearch(-1, #P[0]);
Первый - Сколько искать, или -1 если искать все
Второй - Указатель на массив string, в который запишутся найденные фрагменты текста
Поиск продолжается в том тексте, в котором искали при вызове первой функции и с тем же регулярным выражением.

regexsearch(-1, #P[0], R);
Первый - Сколько искать, или -1 если искать все
Второй - Указатель на массив string, в который запишутся найденные фрагменты текста
Третий - НОВАЯ Строка регулярного выражения
Поиск продолжается в том тексте, в котором искали при вызове первой функции, но с новым регулярным выражением.

Для всех вариантов функций возможно указывать свои флаги.



Пример

CODE:
string P[50];
string T="Сначала ищем числа -222+ или -555+, затем продолжаем числа -1111+ и " + "еще есть число -1212+ и -потом+ текст и еще -один+ текст"; // строка, в которой ищем
string R="(?<=-)[0-9]+(?=+)";
messagebox (T);

//Ищем 2 числа
int k=regexsearch(2, #P[0], T, R);
for (int n=0; n<k; n++)
{
messagebox (P[n]+" 0 "+format(regexstart(n)));
}

//Продолжаем доискивать все оставшиеся числа с последнего найденного места по старому регулярному выражению
k=regexsearch(-1, #P[0]);
for (n=0; n<k; n++)
{
messagebox (P[n]+" 1 "+format(regexstart(n)));
}

//Начинаем искать текст с новым регулярным с последнего найденного места
R="(?<=-)(.*?)(?=+)";
k=regexsearch(-1, #P[0], R);
for (n=0; n<k; n++)
{
messagebox (P[n]+" 2 "+format(regexstart(n)));
}
 
 Top
konctantin777
Отправлено: 27 Ноября, 2023 - 19:09:59
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1136
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




Здравствуйте.
Подскажите как определить, что в конце текста есть 666. Бывает от одного знака до 8.
CODE:
string s="2";
или
string s="63666";

(Отредактировано автором: 27 Ноября, 2023 - 19:10:31)

 
 Top
Zireael
Отправлено: 28 Ноября, 2023 - 01:29:51
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
как определить, что в конце текста есть 666.

CODE:
string s="63666";

string tmp;
if(regexsearch(1, #tmp, s, "666$"))messagebox("+++");
else messagebox("---");
 
 Top
konctantin777
Отправлено: 10 Января, 2024 - 17:54:26
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1136
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




Здравствуйте.
Подскажите как найти с определённым количеством символов ? В данном примере "1-2 +3"
В виз редакторе делаю
CODE:
string текст= "Текст ++в !котором ищем? --по регулярн1ому ++!выражен ? ию2-1-2 +3+!Текст в ?котором --выраж3ение";
в блоке regexsearch
"((1)(.*)(2)(.*)(3)){1,10}"

Ищет всё
 
 Top
Zireael
Отправлено: 11 Января, 2024 - 00:40:27
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4397
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
В данном примере "1-2 +3"

А в другом примере будут другие данные? Что искать надо?
 
 Top
konctantin777
Отправлено: 11 Января, 2024 - 13:45:37
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1136
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




Есть блок кода со страницы. Найти есть ли 1я часть (айди игрока)+2я часть(номерИгрока)+3я часть(состояние игрока) и тд в этом блоке. Между ними может быть разное количество символов. Таких блоков несколько. Думаю если поставить, что всего в найденном не более 500 символов, то будет находить только в одном блоке, а не 1ю часть из 1го блока, 2ю из 3го, 3ю часть вообще с конца.
(Добавление)
Т.е. найти "символы"+неизвестное количество символов+"ещё символы"+неизвестное количество символов+"ещё другие символы"
Если то что нашлось, уместилось в 500 знаков, значит нашли, что надо.
 
 Top
Страниц (25): В начало « 17 18 19 20 21 22 23 [24] 25 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by