es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Si se encuentra “/” en la línea, ignore la cadena hasta “/” y coincida con todo lo que viene después.

Soy nuevo en todo esto, así que disculpen cualquier imprecisión.

Estoy tratando de escribir una expresión regular que busque “/” en una línea en una posición específica. Si se encuentra, debe ignorar todo antes y coincidir con todo lo que está después.

Hasta ahora, se me ha ocurrido:

^(?(?=^.{6}[\/])[a-zA-Z0-9\_\-]+|\n)

pero parece que está haciendo exactamente lo contrario; si encuentra “/” en la posición 7, coincide con todo antes de “/”. Me he inspirado en diferentes hilos, pero aún no logro hacerlo funcionar.

¿Alguna idea de qué estoy haciendo mal?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que tu expresión regular está utilizando una instrucción condicional, pero no está haciendo exactamente lo que deseas. La sintaxis ^(?(?=condición) entonces|sino) significa “si la condición es verdadera, coincidir con entonces, de lo contrario coincidir con sino”. En tu caso, la condición es ^.{6}[\/], que coincide con cualquier línea que comience con seis caracteres y luego una barra inclinada. Por lo tanto, tu expresión regular básicamente dice lo siguiente:

    • Si la línea comienza con seis caracteres y una barra inclinada, coincidir con [a-zA-Z0-9\_\-]+
    • De lo contrario, no coincidir con nada (o un carácter de nueva línea)

    Lo que realmente quieres hacer es utilizar una aserción de retroceso positiva para verificar que haya una barra inclinada en una posición específica en la línea, y luego coincidir con todo lo que esté después de esa posición. Aquí tienes una forma de escribir esa expresión regular:

    (?<=^.{5}\/).*
    

    Vamos a analizarlo:

    • (?<=...) es una aserción de retroceso positiva, que verifica que el patrón dentro de los paréntesis coincida inmediatamente antes de la posición actual, sin incluirlo en la coincidencia. En este caso, estamos buscando la secuencia ^.{5}\/, que coincide con cualquier línea que comienza con cinco caracteres y una barra inclinada. Esto significa que la barra inclinada debe estar en la sexta posición de la línea, que es lo que pediste.
    • .* coincide con todo lo que está después de la barra inclinada, porque . coincide con cualquier carácter (excepto nueva línea) y * significa “cero o más veces”.

    Por lo tanto, esta expresión regular debería hacer lo que deseas: coincidirá con todo lo que hay después de una barra inclinada en la sexta posición de la línea. Si no hay una barra inclinada en esa posición, la expresión regular no coincidirá con nada. Ten en cuenta que esta expresión regular asume que deseas coincidir con el resto completo de la línea después de la barra inclinada; si solo deseas coincidir con una parte específica de ella, deberás ajustar la parte .* en consecuencia.

Comments are closed.