Page 1 of 1

Работа с числами

Posted: Mon Feb 11, 2013 8:51 am
by F-rit
Подскажите пжлст, может уже где-то было обсуждение и есть решение.
Приходится работать с большими объемами текста. И очень актуален вопрос обнаружения чисел дробленых точкой xxx.xxx
Надо их все обнаружить и точку перевернуть в запятую.

Re: Работа с числами

Posted: Mon Feb 11, 2013 9:47 am
by DV
Нужно использовать регулярные выражения.
Регулярные выражения описаны в справке AkelPad, как это ни парадоксально для пользователей, туда не заглядывающих. Эта справка говорит нам:

Code: Select all

.     любой символ
[a-z] диапазон символов
Поскольку . означает любой символ, а мы хотим найти конкретно точку, в регулярном выражении следует использовать "заэкранированную" точку: \.
Поскольку [a-z] означает диапазон символов, а мы хотим искать только цифры, указываем диапазон [0-9]
Итого, выражение вида ЦифраТочкаЦифра выглядит так: [0-9]\.[0-9]
Далее, мы хотим заменить выражение ЦифраТочкаЦифра на ЦифраЗапятаяЦифра. Для такой замены нам нужно временно выделить (запомнить) цифры до и после точки, чтобы они могли участвовать в замене. Что говорит нам справка?

Code: Select all

(pattern) под-выражение, совпадаюшее с pattern и подхватывающее это совпадение
Как мы уже выяснили, с цифрой совпадает выражение [0-9]. Теперь, если мы возмём его в скобки, то как раз получим под-выражение, совпадающее с цифрой и подхватывающее эту цифру. Таким образом, регулярное выражение для поиска становится таким: ([0-9])\.([0-9])
Для замены используем \1,\2
Здесь \1 ссылается на содержимое первой скобки, \2 - второй.

Posted: Mon Feb 11, 2013 9:54 am
by Infocatcher
F-rit
Примерно так: viewtopic.php?p=21224#p21224, но там баг какой-то странный.

Ну, или через SearchReplace.js
Что: ((?:^|[^\d\.])\d+)\.(\d+(?=[^\d\.]|$))
Чем: $1,$2

(то же самое, но в замене $ вместо \)


DV
А я зато баг обнаружил, тоже польза. :D

Posted: Mon Feb 11, 2013 10:00 am
by F-rit
Спасибо за разъяснения. В области программирования, я продвинулся не далее элементарного html. Толкования на Русском языке оказались не лишними.

Posted: Sun May 12, 2013 5:47 pm
by bayzhanov
Может это баг: при использовании положительного просмотра назад в регулярном выражении (?<=Z)(\d+\.\d+) не заменяет что бы не указывал бы в поле заменить чем

Posted: Mon May 13, 2013 7:14 pm
by opk44
bayzhanov
1. Сообщения о багах размещаются в отдельной ветке, а не тиражируются по нескольким темам. Если же Вы сами не можете определиться, считать то или иное поведение багом или нет, то Ваше сообщение может быть просто проигнорировано.
2. Предположительно такое поведение описывается в документации как "...Соответствие не сохраняется для последующего использования..."
3. Факт, что замена работает в варианте использования "Заменить всё".

Re: Работа с числами

Posted: Thu Jul 15, 2021 6:18 am
by xzQbCJfH
DV wrote:Регулярные выражения описаны в справке AkelPad, как это ни парадоксально для пользователей, туда не заглядывающих.
Не парадоксально, когда, например, корректор, профессионально работающий с текстами, для упрощения своей работы-таки заглядывает в справку AkelPad, видит там "сверхжадные" и "нежадные" "квантификаторы", "обратные ссылки" (не имеющие отношения к гиперссылкам), "суррогатные пары" (не относящиеся к супружеству), "длину ровно две цифры" (покажите мне дробное количество цифр), "любые символы, которые являются разделителями"... — заглядывает, закрывает, и отправляется на форум. А на форуме, в лучших традициях фидонета, ему демонстративно выражают презрение его уровнем технической подготовленности. Подразумевая, что "если не можешь осилить эту область знаний, мы тебя сюда не звали, но и проигнорировать твой вопрос без высокомерной прокачки самооценки не можем".

Re: Работа с числами

Posted: Fri Jul 16, 2021 10:57 am
by DV
xzQbCJfH,

Сверхжадные квантификаторы:
https://www.google.com/search?q=%D1%81% ... 1%80%D1%8B

Обратные ссылки:
https://www.google.com/search?q=%D1%80% ... 0%BA%D0%B8

Суррогатные пары:
https://www.google.com/search?client=fi ... 0%BE%D0%B4

По символам-разделителям, действительно, сложно найти что-то стоящее.
Однако тут всё просто: символы-разделители - это в первую очередь знаки препинания и пробелы (в том числе символ табуляции, новая строка и т.п.). Также к символам-разделителям можно отнести знаки математических операций и прочие специальные символы, не являющиеся буквой или цифрой.