Java Regex для замены только части строки (url) - PullRequest
3 голосов
/ 16 марта 2020

Я хочу заменить только цифру c секцию строки. В большинстве случаев это либо полный URL, либо часть URL, но это также может быть просто обычная строка.

Обратите внимание, что я не заменяю 1 с /api/v1

Пока у меня есть только следующие, которые, кажется, работают в большинстве случаев:

input.replaceAll("/[\\d]+$", "/XXXXX").replaceAll("/[\\d]+/", "/XXXXX/");

Но у этого есть 2 проблемы:

  • Замена размер не совпадает с исходной длиной строки.
  • Символ замены жестко закодирован.

Есть ли лучший способ сделать это?

Ответы [ 3 ]

3 голосов
/ 16 марта 2020

В Java вы можете использовать:

str = str.replaceAll("(/|(?!^)\\G)\\d(?=\\d*(?:/|$))", "$1X");

Демонстрация RegEx

Подробности RegEx:

  • \G устанавливает позицию в конце предыдущего совпадения или в начале строки первого совпадения.
  • (/|(?!^)\\G): совпадение / или конец предыдущего совпадения (но не в начале ) в группе захвата # 1
  • \\d: соответствует разности git
  • (?=\\d*(?:/|$)): убедитесь, что после цифр следует / или конец.
  • Замена: $1X: замените его группой захвата # 1, за которой следует X
0 голосов
/ 16 марта 2020

Прежде всего вам нужно что-то вроде этого:

String new_s1 = s3.replaceAll("(\\/)(\\d)+(\\/)?", "$1XXXXX$3");
0 голосов
/ 16 марта 2020

Не Java парень здесь, но идея должна быть передаваемой. Просто запишите /, цифры и / при желании, посчитайте длину второй группы и снова вернитесь.

Итак

(/)(\d+)(/?)

становится

$1XYZ$3

См. демо на regex101.com и этот ответ для лямбда-эквивалента, например, Python или PHP.

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