Заменить все нечисловые символы только одним словом - PullRequest
0 голосов
/ 19 сентября 2018

Я хочу сделать следующую замену:

WORD1234 -> W1234

Итак, я использую регулярное выражение:

([^\d]*)([0-9]+)([^\d]*)

Замена: W$2

Если слово WORD1234AAAAA, используя предыдущее регулярное выражение, я получаю тот же результат: W1234, чего я и хочу.

Но если слово WO12RD34, результат, который я имею:W12W34

В основном, во всех случаях я хочу удалить все нечисловые символы и добавить букву W в начале.

Обновление:

ВводСтрока не всегда начинается с W.Это может быть, например, ABC12DE34 и желаемый результат: FA1234.То есть удалите все нечисловые символы и добавьте слово в начале.

1 Ответ

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

Попробуйте это:

String regex = "(?<start>^W)|(\\D)";
String replacement = "${start}";

System.out.println("WO12RD34".replaceAll(regex, replacement)); //prints W1234
System.out.println("WORD1234AAAAA".replaceAll(regex, replacement)); //prints W1234

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

Идея состоит в том, что при совпадении начала строки, за которым следует W, именованный шаблон "start" будет инициализирован как ^ W.Затем просто замените ^ W на себя.

В противном случае при сопоставлении любого нецифрового символа начальный шаблон не будет установлен (и будет пустым).Затем также замените нецифровый символ ничем.

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