Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - w01k

Страницы: [1]
1
Цитировать
(\\d+\\.\\D+)| - излишне, так как следующее выражение (\\d+[^\\w\\.]) также справится с задачей не обрабатывать числа типа 1234.12323 если не верите попробуйте убрать и результат не изменится.

не излишне, потому что 789645..4566 это два целых числа, а без (\\d+\\.\\D+)| они не будут обрабатываться

2
спасибо за придуманный пример.
Цитировать
объясните только необходимость
(\\d+\\.\\D+)|

это нужно для того, чтобы числа вида 1234.12323 не обрабатывались, т.к. они не целые.
Цитировать
предлагаю все же - гну свою линию:
s/(\\s|,|:|\\G)(\\d{3})(?=\\d+(\\s|,|:|\\G))/$1$2,/g;

кроме \\s, , и : цифры могут быть разделены кучей других символов - придётся все перечислить. к тому же бессмыслено ставить знак конца предыдущего совпадения \'\\G\' до и после шаблона.
вот выражение, которое справилось со строкой

789345345345345456:45:1234562

s/([^\\w\\.]|\\.\\.|\\G)(\\d{3})(?=(\\d+\\.\\D+)|(\\d+[^\\w\\.])|(\\d+\\Z))/\\1\\2,/g

789,345,345,345,345,456:45:123,456,2

3
Цитировать
ну собственно говоря. что вы хотите?
провести операции с файлом или со строкой и для вас не важно каким способом главное чтобы целые числа разделить запятыми на разряды слева направо

или
вам нужно регулярное выражение которое бы сделало из исходной строки
454153 7842 45 456 7845.12 789,456:45:1234562 ах1000
результирующую
454,153 784,2 45 456 7845.12 789,456:45:123,456,2 ах1000

строка - просто частность, пример различных комбинаций цифр.
Цитировать
s/[\\s|,|:]((\\d{3})(\\d+))[\\s|,|:]/\\2,\\3/g

эт всё не то.   во-первых, результирующая строка будет "съедать" пробелы/какие-либо разделители. во-вторых, отделится только первый разряд
 123456789
 123,456789 (а надо 123,456,789)

я, вроде, придумал регулярное выражение (парился дня 3, при том, что это было задание на 40 минут...)

s/([^\\w\\.]|\\.\\.|\\G)(\\d{3})(?=(\\d+\\.\\D+)|(\\d+\\s))/\\1\\2,/g

4
собственно говоря, всё уже написал:
все целые числа разделить запятыми на разряды слева направо. ответ представить в виде perl [-p -e -i] \'s/regexp/.../g\'

5
нужно не просто вывести все целые числа, разделяя их запятой, а модифицировать исходный текст файла/строки так, чтобы в целых числах разряды разделялись запятой. например:
454153 7842 45 456 7845.12 789,456:45:1234562 ах1000
454,153 784,2 45 456 7845.12 789,456:45:123,456,2 ах1000

6
в том то и дело, что задача состоит в том, чтобы решение представляло собой одну строчку. причём запускаемую через командную строку вида:
perl [-p -e -i] \'s/regexp/.../g\'
вот(((

7
строчка
$src =~s/(\\d\\d\\d)||(\\W\\d+\\.\\d+)||([A-Za-z]+\\d+\\W)/\\1/g;
выводит всё, кроме тех чисел и переменных, которые не нуждаются в разделении на разряды.
...15785  556 88 4   fghd454444 4578/456/5/46445:45454:5:45:564556   4210101.98752 7895.3545135 984785848 156518..4856..Testing... OK! It works

...15785  556 88 4   4578/456/5/46445:45454:5:45:564556   984785848 156518..4856..Testing... OK! It works
 как этим воспользоваться - не понимаю(((


можно ли каким-нибудь образом совместить эти строки в одну?
$src =~s/[A-Za-z]+\\d+//g;
$src =~s/\\d+\\.\\d+//g;
$src =~s/(\\d\\d\\d)(?=\\d)/\\1,/g;
они делают, что требуется, правда, удаляют всё, не подходящее под шаблон
исх. строка: ...15785  556 88 4   fghd454444 4578/456/5/46445:45454:5:45:564556   4210101.98752 7895.3545135 984785848 156518..4856..Testing... OK! It works
результат: ...157,85  556 88 4    457,8/456/5/464,45:454,54:5:45:564,556     984,785,848 156,518..485,6..Testing... OK! It works


ещё вопрос, можно писать так:
perl -pe -e \'s///\' -e \'s///\' filename

8
задача следующая: разделить разряды ЦЕЛОГО числа запятыми слева направо. всё должно быть оформлено в виде s/regexp/.../g. при этом числа могут быть разделены точками

у меня получается только так:
$src =~s/((?:\\D+\\.)|(?:\\s\\d*?))(\\d\\d\\d)(?=(\\d+\\.\\D+)|(\\d+\\s))/\\1\\2,/g;

при этом
исходная строка: ...15785456451  556 88 4   fghd454444    4210101.98752 7895.3545135 984785848 156518..4856..
результат: ...157,85456451  556 88 4   fghd454444    4210101.98752 7895.3545135 984,785848 156,518..485,6..

либо так:
$src =~s/(?
исходная строка: ...15785  556 88 4   fghd454444    4210101.98752 7895.3545135 984785848 156518..4856..
результат: ...157,85  556 88 4   fghd454,444    4210101.9875,2 7895.3545,135 984,785,848 156,518..485,6..

Страницы: [1]