Saltar al contenido

Expresión regular para omitir el carácter en el grupo de captura

Después de tanto trabajar hemos hallado la solución de esta dificultad que muchos lectores de nuestro sitio web tienen. Si deseas compartir algo más no dudes en aportar tu información.

Solución:

En resumen: no puedes. Una coincidencia siempre es consecutiva, incluso cuando contiene cosas como afirmaciones de ancho cero, no hay forma de hacer coincidir el siguiente carácter si desea llegar al siguiente.

Realmente no hay una manera de crear una expresión tal que el texto coincidente sea diferente al que se encuentra en el texto de origen. Deberá eliminar el guión en un paso separado, ya sea haciendo coincidir la primera y la segunda parte individualmente y concatenando los dos grupos:

match = Regex.Match( text, "([A-B]2,3)-([0-9]2,3)" );
matchedText = string.Format( "01", 
    match.Groups.Item(1).Value, 
    match.Groups.Item(2).Value );

O eliminando el guión en un paso separado del proceso de coincidencia:

match = Regex.Match( text, "[A-B]2,3-[0-9]2,3" );
matchedText = match.Value.Replace( "-", "" );

Su afirmación de que no es posible hacerlo sin subagrupar + concatenar es correcta.

También podrías hacer como Jeff-Hillman y simplemente quitar los personajes malos después del hecho.

Es importante tener en cuenta aquí, aunque “no use expresiones regulares para todo”.

Regex está diseñado para soluciones menos complicadas para problemas no triviales, y no debe usar “oh, usaremos una expresión regular” para todo, y no debe adquirir el hábito de pensar que puede resolver el problema en un expresión regular de un paso.

Cuando haya un método trivial viable que funcione, por supuesto, utilícelo.

Una idea alternativa, si necesita devolver varias coincidencias en un cuerpo de código, busque la expresión regular basada en “devolución de llamada” de su idioma, que permite pasar cualquier grupo coincidente/encontrado a una llamada de función que puede hacer sustitución en línea. (Especialmente útil para hacer reemplazos de expresiones regulares).

No estoy seguro de cómo funcionaría en .Net, pero en php harías algo como (no es el código exacto)

  function strip_reverse( $a )
  
     $a = preg_replace("/-/", "", $a );
     return reverse($a);
  
  $b = preg_replace_callback( "/(AB[-]?cde)/" , 'strip_reverse' , "Hello World AB-cde" ; 

Si conservas alguna desconfianza y capacidad de aumentar nuestro post te insinuamos dejar una nota y con placer lo leeremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *