Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

231
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!