#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
Найдите позицию, в которой позади меня стоит тире, а впереди меня нет ничего, кроме цифр до конца строки. С этой позиции сопоставьте один или несколько непрерывных нулей.
Комментарии:
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