получение определенного символа

#java #regex #spring #string #replaceall

#java #регулярное выражение #весна #строка #замените все

Вопрос:

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

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

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

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

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

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

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

Комментарии:

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

Ответ №1:

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

 (?<=-)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

Комментарии:

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

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

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

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

5. Это работает отлично, спасибо, спасибо, спасибо !!! 🙂

Ответ №2:

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

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

Для ввода жала: String a = "020200218-0PSS-00000010";
На выходе получается:
020200218-0PSS-10

Комментарии:

1. На самом деле это тоже сработало, спасибо, я одобрил MonkeyZeus, потому что я думаю, что на самом деле это проще сделать таким образом! Но спасибо вам за то, что нашли время найти мой ответ и ответить на него 🙂

Ответ №3:

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

Это не учитывает никаких цифр и в случае успеха даст полное совпадение вместо только нулей.

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

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

Объяснение

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

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

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

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

Выходной сигнал

 020200218-0PSS-10