[ID CS4-CS6] Ранжирование в числах

Статус
Закрыто для дальнейших ответов.

zin_wlad

Участник
Топикстартер
Сообщения
12
Реакции
0
Подскажите как сделать замену или групировку цифр в GREP. Надо 10000 заменить на 10 000, 1000000 на 1 000 000.
 

LeonidB

Их бин
10 лет на форуме
Сообщения
2 470
Реакции
1 530
Первый прикид:

Найти:
Код:
(\d{2,3})(\d{3})\>
Заменить:
Код:
$1~4$2
(или вместо четвертной шпации ~4 поставить любую другую неразрывную по вкусу).

Нажимать "Заменить всё" до тех пор, пока будет заменять.
Можно, наверно, сделать более сложную конструкцию - чтобы за 1 проход всё менялось, - но это дальше думать надо, а мне сейчас лениво :)
 

Linxy

Девушка с битой
10 лет на форуме
Сообщения
2 277
Реакции
3 836
  • Спасибо
Реакции: granat и LeonidB

similideus

12 лет на форуме
Сообщения
671
Реакции
349
Код:
Find: (?<=\d)(\d{2})
Replace: ~.$1

digits.png

Upd.
Пардон, глупость написал. Исправлюсь :)
 

LeonidB

Их бин
10 лет на форуме
Сообщения
2 470
Реакции
1 530
@similideus, у Вас 1000 разбивается (1 000), хоть и не должно, а 10000 - разбивается не там (1 0000).
Впрочем, и в моей конструкции 1000000 разбивается не полностью: 1000 000 - но это можно исправить второй заменой:
Код:
Найти: (\d)(\d{3})(~4\d)
Заменить: $1~4$2$3
.
 
Последнее редактирование:

similideus

12 лет на форуме
Сообщения
671
Реакции
349
Не сдаются числа, которые стоят в конце Story:
trouble.png

Но можно добавить временные символы после чисел::
Код:
//FindChangeList.txt
//
grep    {findWhat:"([0-9]+)"}    {changeTo:"$1#"}    {}    // set # mark
grep    {findWhat:"([0-9])(?=([0-9]{3})+#)"}    {changeTo:"$1 "}    {}    // do magic
grep    {findWhat:"(?<=[0-9])#"}    {changeTo:""}    {}    // remove # mark
 

LeonidB

Их бин
10 лет на форуме
Сообщения
2 470
Реакции
1 530
Кстати, вот ещё вариант. И следующая за ним поправочка.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
у меня вот такой вариант со Stack Overflow

(\d{1,3}(?=(\d{3})+(?:\.\d|\b)))
менять на
"$1 "
 
  • Спасибо
Реакции: LeonidB и similideus

similideus

12 лет на форуме
Сообщения
671
Реакции
349
Немножко я не дожал 'fp' Не сообразил как запустить вторую и третью итерации:
Код:
\\ Мой вариант
(\d)(?=(\d{3})+\b)

\\ Skvoznyak
(\d{1,3})(?=(\d{3})+\b)
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
ну, я не сам придумал )
 

LeonidB

Их бин
10 лет на форуме
Сообщения
2 470
Реакции
1 530

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
а почему 1000 не должно? буржуи разбивают
 

andrejK

R.I.P.
Сообщения
10 300
Реакции
5 218
мыж не буржуи.
у нас не положено
 
  • Спасибо
Реакции: NNN5 и LeonidB

LeonidB

Их бин
10 лет на форуме
Сообщения
2 470
Реакции
1 530
а почему 1000 не должно? буржуи разбивают
Ну потому что старые и признанные советские справочники говорят о том, чтобы разбивать на разряды числа, начиная с пятизначных. Типа, наверно, чтобы не отрывать пробелом от числа одну цифру - подобно висячим строкам и т. п. И все как-то к этому привыкли.
Хотя Мильчин в последнем издании своего справочника и делает ссылку на стандарт СЭВ РС 2625—70 ("Основные математические обозначения"), в котором не делается исключения и для 4-значных. Но как-то оно в издательскую практику не внедряется, потому что чуждо и непривычно :)
Кстати, там же Мильчин рекомендует разбивать на разряды по 3 цифры и дробные часть десятичных дробей - но в обратном порядке, то есть слева направо от запятой:
1 267, 234 457 9 - но мы ж не совсем одичали, чтобы таких монстров создавать! В общем, как-то в этом вопросе с Мильчиным соглашаться не хочется.
А вот в таблицах, где 4-значные числа стоят в одном столбике с разбитыми на разряды 5-, 6- и более значными числами, разбивать в любом случае надо и 4-значные - чтобы разряды и пробелы по вертикали совпадали.
 
Последнее редактирование:

LeonidB

Их бин
10 лет на форуме
Сообщения
2 470
Реакции
1 530
И, между прочим, с запуском таких замен надо поосторожнее. Если в тексте есть числа, которые разбивать на разряды нельзя, - то есть годы, номера документов после знака №, марки и наименования каких-нибудь машин и т. п. - то надо все замены делать, отслеживая, а не нажимать "Заменить всё".
 
  • Спасибо
Реакции: NNN5
Статус
Закрыто для дальнейших ответов.