Я хотел бы удалить Zero из строки, ниже приведен пример:
Строка а: 020200218-0PSS-0010
a.replaceall("-(?:.(?!-))+$", "**REPLACEMENT**")
Актуально: 020200218-0PSS-0010
Ожидается: 020200218-0PSS-10
Я использую это регулярное выражение, чтобы поймать -0010: -(?:.(?!-))+$
Я просто не знаю, что делать в разделе ЗАМЕНА, чтобы на самом деле удалить неиспользуемый ноль (не последний ноль, например, «10», а не «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
Спасибо за ответ, проблема с вашим регулярным выражением в том, что оно удаляет все нули. Например, если у меня есть "010", я хочу получить в результате "10", а не "1"
@SWah Вы должны добавить эту информацию к своему вопросу и представить несколько форматов, которые могут встретиться.
@SWah Что должно произойти для 000
или 101
?
Я исправил свой пост, спасибо! Для 000 я никогда не столкнусь, последнее число должно быть> 0. И для 101 тоже ничего, нет неиспользуемых 0.
Это работает отлично, спасибо, спасибо, спасибо !!! :)
@SWah Не за что. Я также смог сократить регулярное выражение, если вам интересно, посмотрите второй пример в моем посте.
Вы можете попробовать что-то вроде этого:
String result = a.replaceAll("-0+(?=[1-9][0-9]*$)", "-");
Для ввода Стинг: String a = "020200218-0PSS-00000010";
Результат:
020200218-0PSS-10
На самом деле это тоже сработало, спасибо, я одобрил MonkeyZeus, потому что я думаю, что на самом деле это проще сделать! Но спасибо, что нашли время, чтобы найти и ответить на мой ответ :)
Шаблон -(?:.(?!-))+$
соответствует -
и 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
Попробуйте:
a.replaceall("-0+(?=[a-9])", "-")