Estoy tratando de crear una expresión regular donde pueda hacer coincidir la inicial de la cadena y luego reemplazar cualquier cosa después de un char específico ... como por ejemplo:

Cadena = 123456789: 0: 0 => Salida = 123456789: 2: 4

Necesito un regeo donde necesite coincidir con "123" al principio, reemplace solo "0: 0" por otra cadena.

Para igualar "123" es fácil: ^ 123, pero no puedo encontrar una manera después de esto para subir a: y reemplazar solo el resto de la cadena.

Agradecería cualquier ayuda.

0
Helio Aymoto 30 may. 2021 a las 05:03

4 respuestas

La mejor respuesta

Puede usar una clase de carácter negada para que coincida hasta la primera aparición de un colon.

En el reemplazo, use la captura del grupo 1, seguido de la sustitución.

^(123[^:]*:)0:0$
  • ^ Inicio de cadena
  • (123[^:]*:) coincidencia 123 Seguido de 0+ veces cualquier char, excepto : usando un clase de carácter negada
  • 0:0 coincidir literalmente
  • $ Fin de la cadena

Demostración de Regex

Si desea reemplazar todo después de coincidir con el primer colon, podría usar .+

^(123[^:]*:).+

Consulte otra Demo regex

0
The fourth bird 30 may. 2021 a las 06:51

Sin saber su contexto exacto de programación, parece que está utilizando una versión de una función regex_replace. Con agrupación adecuada, esto es fácil de hacer.

No pienses en lo que quieres reemplazar. Piensa en lo que quieres mantener.

^(.*?123.*?:)(0:0)(.*?)$

Y como su cadena de reemplazo usa

$12:4$3
0
Chris Maurer 30 may. 2021 a las 06:07

Para reemplazar el "0: 0", puede usar:

Numbers between 123 and 0:0 => /^(123[0-9]+:)0:0/ replace ${1}2:4

O

Anything between 123 and 0:0 => /^(123.+:)0:0/ replace ${1}2:4

Este REGEXP crea un grupo que comienza con 123 hasta que llegue 0: 0 y luego usamos el grupo en la cadena de reemplazo. Sin embargo, esto depende del lenguaje de programación que use:

Ejemplo en PHP

$result = preg_replace("/^(123[0-9]+:)0:0/", "\${1}2:4", "123456789:0:0");

Ejemplo en JavaScript

let result = "123456789:0:0".replace(/^(123[0-9]+:)0:0/, "$12:4");
0
Dharman 30 may. 2021 a las 06:37

Con JavaScript:

const str = `123456789:0:0`;
console.log(str.replace(/(?<=^123[^:]*:).*/, `2:4`));

Consulte PRUEBA REGEX .

EXPLICACIÓN

--------------------------------------------------------------------------------
  (?<=                     look behind to see if there is:
--------------------------------------------------------------------------------
    ^                        the beginning of the string
--------------------------------------------------------------------------------
    123                      '123'
--------------------------------------------------------------------------------
    [^:]*                    any character except: ':' (0 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    :                        ':'
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  .*                       any character except \n (0 or more times
                           (matching the most amount possible))
0
Ryszard Czech 30 may. 2021 a las 21:13