В строке я хочу заменить все слова в квадратной скобке на 3-ю квадратную строку блока - PullRequest
3 голосов
/ 11 апреля 2019

У меня есть строка типа " case 1 is good [phy][hu][get] my dog is [hy][iu][put] [phy][hu][gotcha]"

Я хочу, чтобы строка результата была " case 1 is good get my dog is [hy][iu][put] gotcha "

По сути, я хочу, чтобы все подстроки формата [phy][.*][.*] были заменены насодержание последней (третьей) квадратной скобки.

Я пытался использовать этот шаблон регулярных выражений "\[phy\]\.[^\]]*]\.\[(.*?(?=\]))]", но я не могу придумать, как решить мою проблему без необходимости перебирать каждую подходящую подстроку.

1 Ответ

4 голосов
/ 11 апреля 2019

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

\[phy\]\[[^\]\[]*\]\[([^\]\[]*)\]

и заменить на $1. Смотрите regex demo и Regulex graph :

enter image description here

Детали

  • \[phy\] - [phy] подстрока
  • \[ - [ char
  • [^\]\[]* - 0 или более символов, отличных от [ и ]
  • \] - ] char
  • \[ - [ char
  • ([^\]\[]*) - Группа захвата 1 ($1 - это ее значение в шаблоне замены), которая соответствует нулю или более символов, отличных от [ и ]
  • \] - ] char

Использование Java демо

String input = "case 1 is good [phy][hu][get] my dog is [hy][iu][put] [phy][hu][gotcha]";
String result = input.replaceAll("\\[phy]\\[[^\\]\\[]*]\\[([^\\]\\[]*)]", "$1");
System.out.println(result); 
// => case 1 is good get my dog is [hy][iu][put] gotcha
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...