Получить конкретный персонаж

Я хотел бы удалить Zero из строки, ниже приведен пример:

Строка а: 020200218-0PSS-0010

a.replaceall("-(?:.(?!-))+$", "**REPLACEMENT**")

Актуально: 020200218-0PSS-0010 Ожидается: 020200218-0PSS-10

Я использую это регулярное выражение, чтобы поймать -0010: -(?:.(?!-))+$

Я просто не знаю, что делать в разделе ЗАМЕНА, чтобы на самом деле удалить неиспользуемый ноль (не последний ноль, например, «10», а не «1»)

Спасибо за прочтение!

Попробуйте: a.replaceall("-0+(?=[a-9])", "-")

anubhava 11.12.2020 17:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
66
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете использовать что-то вроде:

(?<=-)0+(?=[1-9]\d*$)

Это переводится как «найти все нули, идущие после тире, ведущие к ненулевой цифре, за которой следуют необязательные цифры, до конца строки».

Приведенная ниже демонстрация написана на PHP, но она должна работать и на Java.

https://regex101.com/r/7E2KKQ/1

$s.replaceAll("(?<=-)0+(?=[1-9]\d*$)", "")

Это также будет работать:

(?<=-)(?=\d+$)0+

Найдите позицию, в которой позади меня стоит тире, а впереди ничего, кроме цифр до конца строки. С этой позиции соответствуют один или несколько непрерывных нулей.

https://regex101.com/r/cdTjOz/1

Спасибо за ответ, проблема с вашим регулярным выражением в том, что оно удаляет все нули. Например, если у меня есть "010", я хочу получить в результате "10", а не "1"

SWah 11.12.2020 16:59

@SWah Вы должны добавить эту информацию к своему вопросу и представить несколько форматов, которые могут встретиться.

MonkeyZeus 11.12.2020 17:00

@SWah Что должно произойти для 000 или 101?

MonkeyZeus 11.12.2020 17:02

Я исправил свой пост, спасибо! Для 000 я никогда не столкнусь, последнее число должно быть> 0. И для 101 тоже ничего, нет неиспользуемых 0.

SWah 11.12.2020 17:06

Это работает отлично, спасибо, спасибо, спасибо !!! :)

SWah 11.12.2020 17:17

@SWah Не за что. Я также смог сократить регулярное выражение, если вам интересно, посмотрите второй пример в моем посте.

MonkeyZeus 11.12.2020 18:03

Вы можете попробовать что-то вроде этого:

String result = a.replaceAll("-0+(?=[1-9][0-9]*$)", "-");

Для ввода Стинг: String a = "020200218-0PSS-00000010"; Результат: 020200218-0PSS-10

На самом деле это тоже сработало, спасибо, я одобрил MonkeyZeus, потому что я думаю, что на самом деле это проще сделать! Но спасибо, что нашли время, чтобы найти и ответить на мой ответ :)

SWah 11.12.2020 17:19

Шаблон -(?:.(?!-))+$ соответствует - и 1+ любому символу, утверждающему, что то, что находится непосредственно справа, не является -, до конца строки.

При этом не учитываются никакие цифры, и в случае успеха вместо одних нулей будет получено полное совпадение.

Вместо поиска вы также можете использовать группу захвата и использовать эту группу в замене с добавлением -.

-0+([1-9]\d*)$

Объяснение

  • -0+ Совпадение - и 1 или более раз ноль
  • ( Группа захвата 1
    • [1-9]\d* Сопоставьте цифру 1-9, за которой следуют необязательные цифры
  • ) Закрыть группу 1
  • $ Утверждать конец строки

Демонстрация регулярных выражений | Демонстрация Java

Поскольку нужно заменить только одну деталь, вы можете использовать replaceFirst.

String a = "020200218-0PSS-0010";
String result = a.replaceFirst("-0+([1-9]\\d*)$", "-$1");
System.out.println(result);

Выход

020200218-0PSS-10

Другие вопросы по теме