Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

232
Visualizações
No se puede ajustar la expresión regular para una subcadena

Tengo que buscar y eliminar una subcadena del texto usando expresiones regulares en PostgreSQL. La subcadena corresponde a la condición: <cualquier texto entre comillas dobles que contenga for|while inside>

Ejemplo

Texto:

 PERFORM xxkkcsort.f_write_log("INFO", "xxkkcsort.f_load_tables__outof_order_system", " Script for data loading: ", false, v_sql, 0);

Entonces, mi propósito es encontrar y eliminar la subcadena "Script para carga de datos:". Cuando traté de usar el siguiente script:

 SELECT regexp_replace( 'PERFORM xxkkcsort.f_write_log("INFO", "xxkkcsort.f_load_tables__outof_order_system", "> Table for loading: "||cc.source_table_name , false, null::text, 0);' , '(\")(.*(for|while)(\s).*)(\")' , '');

He reemplazado todos los textos entre comillas dobles. El resultado se parece a:

 PERFORM xxkkcsort.f_write_log(||cc.source_table_name , false, null::text, 0);

¿Cuál es una expresión regular adecuada para resolver el problema?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

cualquier texto entre comillas dobles que contenga for|while dentro

 SELECT regexp_replace(string, '"[^"]*\m(?:for|while)\M[^"]*"', '');

" ... literal " (sin significado especial aquí, por lo que no es necesario escapar)

[^"]* ... clase de carácter que incluye todos los caracteres excepto " , 0-n veces

\m ... comienzo de una palabra

(?:for|while) ... dos ramas entre paréntesis que no capturan
( regexp_replace() funciona con paréntesis de captura simple, pero es más barato de esta manera ya que no usa la subcadena capturada. Pero intente con el reemplazo '\1' , donde hace la diferencia ...)

\M ... final de una palabra

[^"]* ... como arriba

" ... como arriba

Eliminé \s de su expresión, ya que la descripción de la tarea no requiere estrictamente un carácter de espacio en blanco (final de cadena o puntuación que delimita la palabra ...).

Relacionada:

  • Función de escape para expresiones regulares o patrones LIKE
over 4 years ago · Santiago Trujillo Relatório

0

Puedes usar

 SELECT regexp_replace( 'PERFORM xxkkcsort.f_write_log("INFO", "xxkkcsort.f_load_tables__outof_order_system", "> Table for loading: "||cc.source_table_name , false, null::text, 0);', '"[^"]*(for|while)\s[^"]*"', '') AS Result;

Producción:

 PERFORM xxkkcsort.f_write_log("INFO", "xxkkcsort.f_load_tables__outof_order_system", ||cc.source_table_name , false, null::text, 0);

Vea la demostración de expresiones regulares y el violín DB . Detalles :

  • " - un " carácter
  • [^"]* - cero o más caracteres que no sean "
  • (for|while) - for o while
  • \s - un espacio en blanco
  • [^"]*" - cero o más caracteres que no sean " y luego un " carácter.
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda