2017-02-03 3 views
0

Я ищу регулярное выражение, которое нормализует десятичное число. Когда я говорю normalize, я имею в виду удалить все ведущие нули и все конечные нули после десятичной точки.Нормализовать десятичное число regex

Например:

0.0 -> 0 
1.230 -> 1.23 
0-> 123 
012.30400 -> 12.304 
0102 --> 102" 

До сих пор я пришел с этим

(< =, | ^?) (?:? [. 0 + -] + (= 0 ??.. (?:., | \ B | $)) | 0 + (= [1-9])) | .0+ \ B | \ b0 + (= \ д * \ б) | \ В | (? < = [1-9]) 0 + (=, |? $)

единственная проблема на 0.1 она возвращает .1 в противном случае он работает

+0

См возможное решение [здесь] (http://stackoverflow.com/a/35351336/3832970). –

+0

'[1-9] \ d * (\. \ D * [1-9])?' [Почти работает] (https://regex101.com/r/nSwepA/1), но не работает для '0. x'. – Aaron

+0

«Когда я говорю« нормализовать », я имею в виду удалить все ведущие нули» и «единственная проблема для 0,1 возвращает .1» противоречивы. Вы * специально * запрашиваете удаление всех ведущих нулей, а затем указываете в качестве проблемы, чтобы удалить нулевой вывод. Один из полученных вами ответов приведет к тому, что этот ведущий ноль будет удален, а другой - нет, поэтому это фактически вызвало ненужную путаницу. – hvd

ответ

0

Если это одна запись в каждой строке, попробуйте

^0*(\d+(?:\.(?:(?!0+$)\d)+)?) 

See it here at regex101.

Если вы хотите просмотреть все для всех, вы можете попробовать

\b0*(\d+(?:\.(?:(?!0+\b)\d)+)?) 

See it here at regex101.

Они оба захватывает номер (а) к группе 1.

Если вы хотите, чтобы удалить все, кроме цифр, заменить

^0*(\d+(?:\.(?:(?!0+$)\d)+)?).*$ 

с группой 1.

Check it out here.

0

Простое чередование должно хватить:

^0+|(\.[0-9]+)0+$ 

Замена будет группа захвата 1.

Смежные вопросы