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

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

 Страниц (25): « 1 2 3 4 [5] 6 7 8 9 » В конец    

> Описание: Поиск и замена текста по шаблонам регулярных выражений
Kibor
Отправлено: 22 Мая, 2019 - 13:02:44
Post Id



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


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




Правильно, это выделять достаточно памяти для строки.
+1 для 0
 
 Top
007wan
Отправлено: 22 Мая, 2019 - 13:06:37
Post Id



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


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




Извините, но я иногда не с первого раза понимаю)
(Добавление)
 Kibor пишет:
Правильно, это выделять достаточно памяти для строки.
ну, тогда не 10, а 255?
(Добавление)
CODE:
char c[255];//это буфер для текста 255 байт для всего текста
char b[10];//нужно взять 10 символов из всего текста
string s="123456789089890";//текст
strcpy(#c[0], s);
messagebox (format(#c[0]));
 
 Top
Zireael
Отправлено: 22 Мая, 2019 - 13:18:27
Post Id



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


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




 Цитата:
нужно взять 10 символов из всего текста

CODE:
char c[11];

string s="123456789089890";//текст
string ss;
if(regexsearch(1, #ss, s, ".{1, 10}"))
{
strcpy(#c[0], ss);
messagebox (format(#c[0]));
}

(Отредактировано автором: 22 Мая, 2019 - 13:19:06)

 
 Top
007wan
Отправлено: 22 Мая, 2019 - 13:39:46
Post Id



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


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




Спасибо. Проблема была вообще в другом.
 
 Top
Kibor
Отправлено: 27 Июля, 2019 - 22:34:41
Post Id



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


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




Пример парсинга JSON структуры для поиска в ней данных по названию:

К примеру есть структура
CODE:
{"error":"not error","balance":5.36804,"id":12}


Необходимо узнать данные по любому элементу.

CODE:
string fr="{"+formatic(34)+"error"+formatic(34)+":"+formatic(34)+"not error"+formatic(34)+"," + formatic(34)+"balance"+formatic(34)+":5.36804,"+formatic(34)+"id"+formatic(34)+":12}";
messagebox (fr);

string find="balance";//Что ищем


if (find_JSON(fr, #find))//Если вернула 1
{
messagebox (find);//Выводим результат
}



function find_JSON(string json, string #find)
{
string res;
find=formatic(34)+find+formatic(34)+":";
if (regexsearch(1, #res, json, "(?<="+find+")(\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+")([-+]+\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+")(\d+.\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+")([-+]+\d+.\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+formatic(34)+")(.*)+(?="+formatic(34)+"[,}])")==1) {find=res; return 1;}
return 0;
}
 
 Top
Zireael
Отправлено: 27 Июля, 2019 - 22:56:00
Post Id



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


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




 Цитата:
(\d+)

Скобки не нужны, ссылка на подгруппу не используется, а возврат подгрупп не реализован (неплохо бы этого доделать).
CODE:
if (regexsearch(1, #res, json, "(?<="+find+")(\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+")([-+]+\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+")(\d+.\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+")([-+]+\d+.\d+)(?=[,}])")==1) {find=res; return 1;}

Тоже самое:
CODE:
if (regexsearch(1, #res, json, "(?<="+find+")[-+]*\d+(\.\d+)*")==1) {find=res; return 1;}
 
 Top
Kibor
Отправлено: 27 Июля, 2019 - 23:58:43
Post Id



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


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




А как будет выглядеть регулярка учитывая что около символов
:
,
{
}
могут быть пробелы неизвестное количество?
 
 Top
Zireael
Отправлено: 28 Июля, 2019 - 01:04:02
Post Id



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


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




 Цитата:
могут быть пробелы неизвестное количество?

\s* - означает 0 или больше пробелов. Точнее не только пробелов, \t \r \n тоже. Если нужен именно пробел, то ' *'.
Важно:
 Цитата:
(?<=тут нельзя использовать квантификаторы * и +)
(?=тут можно)

CODE:
string s=", "+"123"; // с пробелами
messagebox(s);

// если пробела нет, то найдёт '123'
// если есть, то ' 123', т. е. пробелы тоже будут
if(regexsearch(1, #s, s, "(?<=,)\s*\d+"))messagebox("Найденный текст: "+s+", длина текста: "+format(size(s))); // пробелы нужно удалять отдельно

s=","+"123"; // без пробела
if(regexsearch(1, #s, s, "(?<=,)\s*\d+"))messagebox("Найденный текст: "+s+", длина текста: "+format(size(s)));



s="123"+" }"; // с пробелами
messagebox(s);
if(regexsearch(1, #s, s, "\d+(?=\s*})"))messagebox("Найденный текст: "+s+", длина текста: "+format(size(s))); // пробелы не попадут в результат
s="123"+"}"; // без пробела
if(regexsearch(1, #s, s, "\d+(?=\s*})"))messagebox("Найденный текст: "+s+", длина текста: "+format(size(s))); // пробелы не попадут в результат


Если добавить возможность возвращать текст из подгрупп (то что в скобках), то можно не использовать (?<=) и (?=). Т. е. для строки ", 123" регулярка ",\s*(\d+)". Соответственно вернуть всё что нашлось, а отдельной функцией, по типу regexstart, вернуть текст, который находится в скобках. Скорее всего в библиотеке это должно быть.
 
 Top
Kibor
Отправлено: 31 Июля, 2019 - 19:17:40
Post Id



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


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




Перенес все в Перенесено с темы Регулярные выражения
 
 Top
ivantu
Отправлено: 26 Сентября, 2019 - 16:44:39
Post Id



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


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




Друзья подскажите пожалуйста, как из строчки удалить все, кроме точного вхождения слова к примеру:

Клоун показывает фокус // Найдет слово
Шили форму // Тут не должен найти

я пытался так:
CODE:
regexreplace(-1, #text, text, "[^\фокус]", "");


как правильно подскажите.
 
 Top
Страниц (25): « 1 2 3 4 [5] 6 7 8 9 » В конец
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0)
« О программе Кибор »


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




Powered by