Замените определенный символ в конце шаблона yyyy-MM-dd, используя регулярное выражение в Java - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть строка, которая содержит даты в формате yyyy-MM-dd вместе с другими символами.Некоторые из этих дат содержат символ 'Z' в конце.

Например:

control1970-04-26Z_shifted1982-02-01_Zulu1999-09-09Z

Мне нужно исключить эти символы 'Z' в строке, и я думаю, что регулярное выражение будетхорошее решение.

Я попробовал следующее регулярное выражение:

\d{4}-\d{2}-\d{2}Z{1}

Но оно соответствует всей дате, включая 'Z' символ.

Есть ли способсопоставить только символ 'Z' и исключить его, используя метод replaceAll?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Чтобы заменить часть строки в зависимости от того, что предшествует ей, используйте положительный взгляд назад :

str = str.replaceAll("(?<=\\d{4}-\\d{2}-\\d{2})Z", "");

Подробнее о lookarounds здесь.

0 голосов
/ 28 сентября 2018

Вы можете использовать группу захвата и заменить ее заполнителем на значение, сохраненное в этой группе:

String result = s.replaceAll("(\\d{4}-\\d{2}-\\d{2})Z", "$1");

См. Демонстрационную версию regex .Здесь (\\d{4}-\\d{2}-\\d{2}) - группа захвата из-за пары неэкранированных скобок, ее значение хранится в группе 1. Z просто соответствует.Когда мы заменяем совпадение на $1, дата вставляется обратно в результирующую строку, а Z отбрасывается.

Обратите внимание, что если вы хотите убедиться, что совпадают только четыре цифры, которым не предшествуетеще одну цифру, добавьте к шаблону (?<!\\d).

Если вы хотите убедиться, что после Z нет других букв, вы можете добавить (?![a-zA-Z]) в конце шаблона.

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