![[identity profile]](https://www.dreamwidth.org/img/silk/identity/openid.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
кто разбирается в регулярных выражениях питон - помогайте.
есть текст формата:
"пыщпыщпыщ: 111.11
олололоо: 222.22
ыыыыыыы: 333.33"
нужно обрезать всё кроме "333.33".
регулярное выражение типа .+?([\d.\d.]+) через echo "%1" выдаёт 111.11, но "нарастить" его по принципу .+?([\d.\d.]+)([\d.\d.]+)([\d.\d.]+) echo %3 не выдаёт 333.33. я получаю либо часть первого числа, либо точку, либо пустоту, либо ошибку. гугление мануалов особо не помогло, да и я не программист.
какое будет корректное выражение для того, чтобы убрать весь текст кроме "333.33"? или хотя бы убрать всё, кроме чисел?
есть текст формата:
"пыщпыщпыщ: 111.11
олололоо: 222.22
ыыыыыыы: 333.33"
нужно обрезать всё кроме "333.33".
регулярное выражение типа .+?([\d.\d.]+) через echo "%1" выдаёт 111.11, но "нарастить" его по принципу .+?([\d.\d.]+)([\d.\d.]+)([\d.\d.]+) echo %3 не выдаёт 333.33. я получаю либо часть первого числа, либо точку, либо пустоту, либо ошибку. гугление мануалов особо не помогло, да и я не программист.
какое будет корректное выражение для того, чтобы убрать весь текст кроме "333.33"? или хотя бы убрать всё, кроме чисел?
no subject
Date: 2016-12-07 04:11 pm (UTC)Или ": (\d+\.\d+)$", если вдруг вернёт не все цифры.
no subject
Date: 2016-12-07 05:27 pm (UTC)во втором - ошибка.
no subject
Date: 2016-12-07 06:46 pm (UTC)no subject
Date: 2016-12-07 06:49 pm (UTC)no subject
Date: 2016-12-15 02:57 am (UTC)no subject
Date: 2016-12-07 05:04 pm (UTC)- не_пробелы в количестве 1 или более;
- двоеточие, пробел;
- не_пробелы в количестве 1 или более;
- перевод строки;
и так три раза подряд.Что Вам нужно оставить? Только текст после последнего "двоеточие, пробел"? Или как-то иначе?
no subject
Date: 2016-12-07 05:27 pm (UTC)чтобы текста не было, а просто подряд 111.11 222.22 333.33
ну либо просто 333.33
no subject
Date: 2016-12-07 08:38 pm (UTC)Это если построчно. Но я думаю, дальше Вы сами допилите.
no subject
Date: 2016-12-07 08:47 pm (UTC)no subject
Date: 2016-12-08 07:09 pm (UTC)Просто я в основном работаю с регексами через grep и sed, а там это немного отличается. Для sed это примерно так: (троеточие - это имя файла или перенаправление ввода; а ещё можно брать данные через "|" - но он будет слева от команды). Попробуйте натравить этот вариант на Ваши данные. Правда, он оставит переводы строки - sed работает построчно.
no subject
Date: 2016-12-07 05:13 pm (UTC)333\.33
Тяжело, наверное, "программистам", которые не могут выразить даже то, что им нужно.
Небось после несколько часов выяснится, что надо парсить JSON или HTML
no subject
Date: 2016-12-07 05:28 pm (UTC)нужно убрать весь текст кроме последнего числа. или оставить только числа без текста.
no subject
Date: 2016-12-07 06:13 pm (UTC)var str="пыщпыщпыщ: 111.11\
олололоо: 222.22\
ыыыыыыы: 333.33";
str.match(/(\d{3}\.\d{2})/gi);
no subject
Date: 2016-12-07 06:16 pm (UTC)str.match(/(\d{3}\.\d{2})$/gi);
no subject
Date: 2016-12-07 06:32 pm (UTC)str.replace(/[^\d\.\s]/gi,''); // " 111.11 222.22 333.33"
Может у вас проблема в том что флаг глобального поиска не стоит? Регулярное выражение перестает работать в конце строки, вот это gi - это глобальный регистронезависимый поиск. В питоне может быть другой символ флага глобального поиска или даже отдельная функция которая игнорирует переносы строк.
no subject
Date: 2016-12-07 06:22 pm (UTC)/333\.33/ - найдет подстроки точно три тройки+точка+2 тройки
no subject
Date: 2016-12-07 06:28 pm (UTC)no subject
Date: 2016-12-15 02:58 am (UTC)no subject
Date: 2016-12-15 04:58 am (UTC)Но вообще, функции поиска всех вхождений подстроки возвращают массив строк. Берете первый элемент массива, преобразуете к типу float (у Вас судя по примеру такой тип, если число без точки, то к int) и вычитаете требуемое. Разумеется надо это все сопроводить проверками на наличие требуемого элемента, на то, что он корректно преобразовался в float и т.п.
no subject
Date: 2016-12-07 08:00 pm (UTC)Ибо если это мыкание и многозначительное пожимание левым плечом (ц) перевести на русский, то станет куда понятнее.
Требуется шаблон regexp, который выбирает из строки текста число с дробной частью, которая отделена точкой. Примеры такой строки см. ниже.
ответ: \d+\.\d+\s*$
и применять его надо к каждой строке текста по отдельности
no subject
Date: 2016-12-07 08:13 pm (UTC)no subject
Date: 2016-12-08 07:05 am (UTC)no subject
Date: 2016-12-08 07:18 am (UTC)no subject
Date: 2016-12-08 09:26 am (UTC)no subject
Date: 2016-12-08 09:52 am (UTC)no subject
Date: 2016-12-09 08:05 am (UTC)или
re.findall('.*:\s(\d*.\d*)', 'ваш текст') если формат строки постоянен, а количество цифер может меняться.
даст массив значений ['111.11', '222.22', '333.33'] для вашего примера. А дальше еб... делайте с ним что хотите. Надо - склейте через итерацию.
no subject
Date: 2016-12-11 04:49 am (UTC)как выбрать все три строки?
no subject
Date: 2016-12-15 02:58 am (UTC)