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

324
Views
Extraiga filas si hay / hay 'n' palabra / s antes o después de un patrón en postgres 11

Tengo la siguiente tabla en postgres.

 col1 col2 col3 NCT00000412 Drug Placebo Calcitriol NCT00000412 Drug Placebo Alendronate NCT00000774 Biological Placebo version of rgp120/HIV-1MN NCT00000774 Biological Placebo version of rgp120/HIV-1SF2 NCT00005648 Drug Gemcitabine with Placebo NCT00007631 Drug Tretinoin 0.1% cream or placebo NCT00007735 Drug Doxycycline (200mg/day) or Placebo NCT00032435 Drug PAL-40 Placebo NCT00032435 Drug abciximab placebo; reteplase placebo, abciximab NCT00032435 Drug Valsartan placebo + nateglinide placebo

Estoy tratando de extraer esas filas donde la palabra placebo tiene una sola palabra antes o después. La salida esperada es:

 col1 col2 col3 NCT00000412 Drug Placebo Calcitriol NCT00000412 Drug Placebo Alendronate NCT00032435 Drug PAL-40 Placebo

He intentado siguiendo expresiones regulares:

 select * from table where name ~* '\splacebo\w+' or name ~* '\w+placebo\s'
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Puedes utilizar

 select * from table where name ~* '^(?:placebo\s+\S+|\S+\s+placebo)$'

Vea la demostración de expresiones regulares

Detalles

  • ^ - comienzo de la cadena
  • (?:placebo\s+\S+|\S+\s+placebo) - un grupo sin captura que coincide con
    • placebo\s+\S+ - placebo , luego 1+ espacios en blanco y luego 1+ espacios que no son en blanco
    • | - o
    • \S+\s+placebo - 1+ espacios sin espacios en blanco, luego 1+ espacios en blanco y luego placebo
  • $ - final de la cadena.
over 4 years ago · Santiago Trujillo Report

0

Creo que quieres:

 where col3 ~* '(^\S+\s+placebo)|(placebo\s+\S+$)'

Desglose:

 ( ^ beginning of the string \S+ 1 to N characters other than a space \s+ 1 to N spaces placebo literal string "placebo" ) | OR ( placebo literal string "placebo" \s+ 1 to N spaces \S+ 1 to N characters other than a space $ end of the string )

Usé \S en lugar de \w porque quieres hacer coincidir los guiones (lo que \w no hace).

over 4 years ago · Santiago Trujillo Report

0

Como nota, puedes hacer esto simplemente usando like :

 where (name like '% Placebo%' and name not like '% % Placebo%') or (name like '%Placebo %' and name not like '%Placebo % %')
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!