Как сопоставить десятичные цифры, которые равны 0 в конце числа в регулярном выражении? - PullRequest
0 голосов
/ 24 марта 2020

Я хочу удалить нули в конце числа после десятичной точки. Чтобы привести пример:

12.009000 должен соответствовать «000»

У меня есть шаблон регулярных выражений ниже, но он выдает ошибку A quantifier inside a lookbehind makes it non-fixed width, и я не могу найти ни одного Решение, чтобы исправить это. Каков правильный шаблон для успешного сопоставления?

Шаблон : (?<=\.[0-9]*)0+$

Ответы [ 4 ]

1 голос
/ 24 марта 2020

С помощью Java вы можете сделать это следующим образом.

  • (\\d) захватить цифры
  • , за которыми следуют 0 *
  • заменить на захваченные цифры.
  • $1 - обратная ссылка на группу захвата
    str = str.replaceAll("(\\.\\d+?)0+$","$1");
    System.out.println(str);

Примечание: 12,000000 останется 12,0.

1 голос
/ 24 марта 2020
   (\d+[.]?\d*?)0*$
   One more step is needed to replace the dot for numbers such as 12.000

Нажмите здесь для демонстрации: Нажмите здесь

Или для работы с числами, такими как 12.000, за один шаг:

   (?:(\d+)\.0*$)|(?:(\d+[.]?\d*?)0*$)

Нажмите здесь для демонстрации : Нажмите здесь

0 голосов
/ 25 марта 2020

Вот моя попытка :

(?:[.][0-9]*[1-9])(0+)$|([.]0+$)

Предполагается, что входная строка на самом деле является числом (она не защитит от таких вещей, как xyz.001). Он не будет совпадать вообще, если после десятичной запятой нет завершающих нулей; и, если есть, он удаляет:

  1. последовательность 0 с, перед которой стоит [1-9] после [.][0-9]*

или

a [.] с последующей последовательностью 0 с.

Результат всегда будет в захваченной группе, если регулярное выражение совпадает.

0 голосов
/ 24 марта 2020
([\d.]+?)(0*)

"Найти цифры и точки, но не жадно, затем найти конечные нули"

Группа 1 - это число. Группа 2 - конечные нули.

...