Expresión regular para buscar una cadena y reemplazar o añadir caracteres adicionales basados en una condición

VINNUSAURUS:

Tengo una cadena {{m|gem-pro|*karzijan?||to turn}}, cuando cada vez una cadena comienza con {{my termina con }}i quieren envolvente to turncon ()cadena de ménsulas que viene antes}}

Cuerda: {{m|gem-pro|*karzijan?||to turn}}

Se requiere de la secuencia: {{m|gem-pro|*karzijan?||(to turn)}}

La cadena puede ser no sólo to turn, sino cualquier cadena.

Allan:

Puede usar la siguiente expresión regular:

(\{\{m\|[^}]*\|)([^|}]*)(\}\})

y la sustitución:

\1(\2)\3

Entrada:

{{m|gem-pro|*karzijan?||to turn}}
{{m|gem-pro|*karzijan?||abc}}
{{m|gem-pro|*karzijan?||to turn}},{{m|ine-pro|*gers-||to bend, turn}}
{{do nothing}}
#do nothing

Salida:

{{m|gem-pro|*karzijan?||(to turn)}}
{{m|gem-pro|*karzijan?||(abc)}}
{{m|gem-pro|*karzijan?||(to turn)}},{{m|ine-pro|*gers-||(to bend, turn)}}
{{do nothing}}
#do nothing

Demostración: https://regex101.com/r/yoo9KG/2/

explicaciones:

  • (\{\{m\|[^}]*\|)capturará cadenas que comienzan por {{mseguida de 0 a N caracteres que no son }hasta alcanzar una |, el último situado en su {{m...|...|..}}estructura. El grupo de captura se puede hacer referencia hacia atrás a través de\1
  • ([^|}]*) coincidirá con la última cadena en su estructura y almacenarlo en el grupo de captura de segundo.
  • (\}\})capturará el último 2 }y almacenarla en el 3er grupo.
  • Se utiliza en el reemplazo de las 3 referencias hacia atrás y se rodea el segundo uno por paréntesis para llegar a su resultado.

el código de Java:

String input = "{{m|gem-pro|*karzijan?||to turn}},{{m|ine-pro|*gers-||to bend, turn}}";
String output = input.replaceAll("(\\{\\{m\\|[^}]*\\|)([^|}]*)(\\}\\})", "$1($2)$3");
System.out.println(output);

salida:

{{m|gem-pro|*karzijan?||(to turn)}},{{m|ine-pro|*gers-||(to bend, turn)}}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=120416&siteId=1
Recomendado
Clasificación