Martin |
Отправлено: 18 Мая, 2023 - 08:30:37
|
Мастер
Покинул форум
Сообщений всего: 121
Дата рег-ции: Июнь 2022
Репутация: 1
|
Как составить регулярное выражение чтобы оно находило фразу полностью в строке не реагируя на не нужные например мне нужно найти фразу "Я пошел в магазин" но оно так же найдет строку с содержанием
"Я пошел в магазин за молоком"
Цитата:
Я пошел в магазин за яйцами
Я пошел в магазин за молоком
Я пошел в магазин
Я пошел в магазин за хлебом
к примеру чтобы из этого текста выделялось только строка Я пошел в магазин(Отредактировано автором: 18 Мая, 2023 - 08:33:11) |
|
|
Gorago |
Отправлено: 18 Мая, 2023 - 12:16:32
|
Наблюдатель
Покинул форум
Сообщений всего: 34
Дата рег-ции: Май 2023
Репутация: 0
|
Zireael , не работает со списком,
например копирую в буфер этот текст
Цитата: Я пошел в магазин за яйцами
Я пошел в магазин за молоком
Я пошел в магазин
Я пошел в магазин за хлебом
Запускаю код
CODE:string Text;
sleep(100);
readclipboard(Text);
sleep(100);
if(regexsearch(1, #Text, Text, "^Я пошел в магазин$"))messagebox("++++");
else messagebox("Не найдено");
не находит |
|
|
Zireael |
Отправлено: 18 Мая, 2023 - 12:32:32
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: не работает со списком
Тут нет списка, есть многострочный текст.
CODE:string Text;
readclipboard(Text);
messagebox(Text);
if(regexsearch(1, #Text, Text, "^Я пошел в магазин$", MULTILINE))messagebox("++++");
else messagebox("Не найдено"); |
|
|
Kibor |
Отправлено: 17 Октября, 2023 - 19:45:33
|
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Доработал 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)));
}
|
|
|
Zireael |
Отправлено: 28 Ноября, 2023 - 01:29:51
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: как определить, что в конце текста есть 666.
CODE:string s="63666";
string tmp;
if(regexsearch(1, #tmp, s, "666$"))messagebox("+++");
else messagebox("---"); |
|
|
|