Как добавить тысячи разделителей с помощью reg ex? - PullRequest
3 голосов
/ 04 августа 2009

Я использую этот бесплатный RegExp Designer , который находит и заменяет. Как мне найти все числа и добавить тысячи разделителей?

Input:      <node num='12345678'>
Output:     <node num='12,345,678'>

Ответы [ 2 ]

7 голосов
/ 04 августа 2009

Чтобы переформатировать числа только в значения атрибута "num", вы можете сделать это:

(?<=num='\d+)(?=(?:\d{3})+(?!\d))

Но учтите, что это будет работать только в регулярных выражениях .NET, что и используется RegExp Designer. Большинство разновидностей регулярных выражений допускают только те взгляды, которые соответствуют фиксированному числу символов. Регулярные выражения Java допускают просмотр за разной длиной, если существует очевидная максимальная длина, поэтому вы можете подделать ее, используя {min,max} для количественного определения произвольного числа для максимального:

(?<=num='\d{1,20})(?=(?:\d{3})+(?!\d))

Регулярное выражение Джона Хайленда будет работать с любым вкусом, поддерживающим взгляды.

РЕДАКТИРОВАТЬ: я почти забыл; Вот как вы можете сделать это, не оглядываясь назад:

(num='\d{1,3}|\G\d{3})(?=(?:\d{3})+(?!\d))

Мне больше нравится этот по чисто эстетическим соображениям. :)

EDIT2: я забыл упомянуть, что строка замены для последней - "$1,"

5 голосов
/ 04 августа 2009
s/(?<=\d)(?=(\d\d\d)+(?!\d))/,/g

Тем не менее, если в какой-то момент вы работаете с этими данными как со строками, отличными от строк, любой язык, на котором вы работаете, вероятно, имеет средства для форматирования числового вывода.

...