Обсуждение: Find and replace

Поиск
Список
Период
Сортировка

Find and replace

От
"Campbell, Lance"
Дата:

PostgreSQL 10.x

 

I don’t know the best way to do this.  I need to do a find and replace in text fields.  The value I need to find and replace may occur more than once in each field per record. 

 

The value I am trying to match on:

Starts with a single { .

Ends with a single } .

In between these brackets can be the characters 0-9, a-z, A-Z, hyphens and underscores.  But no spaces.  These characters could be in any order.

The replacement value on a match is the same as what was found except for double {{ at the beginning and double }} at the end.  Same values between the brackets as what was matched on.

 

Example:

{ab_1D3-4} becomes {{ab_1D3-4}}

 

Thanks for helping me with this.

 

Lance Campbell

University of Illinois

 

Re: Find and replace

От
Rob Sargent
Дата:


On Sep 11, 2019, at 2:24 PM, Campbell, Lance <lance@illinois.edu> wrote:

PostgreSQL 10.x
 
I don’t know the best way to do this.  I need to do a find and replace in text fields.  The value I need to find and replace may occur more than once in each field per record. 
 
The value I am trying to match on:
Starts with a single { .
Ends with a single } .
In between these brackets can be the characters 0-9, a-z, A-Z, hyphens and underscores.  But no spaces.  These characters could be in any order.
The replacement value on a match is the same as what was found except for double {{ at the beginning and double }} at the end.  Same values between the brackets as what was matched on.
 
Example:
{ab_1D3-4} becomes {{ab_1D3-4}}
 
Thanks for helping me with this.
 
Lance Campbell
University of Illinois

Are there curly braces which don’t start/end such strings?  If not it might be easier to just double them up?


Re: Find and replace

От
"Campbell, Lance"
Дата:

I don’t think that is an option.  The text I am doing the find and replace on contains CSS.  I believe there will be squiggly brackets in the CSS.  However, it should have spaces or carriage return line feeds between the brackets so there will not be any issues.

 

From: Rob Sargent <robjsargent@gmail.com>
Date: Wednesday, September 11, 2019 at 3:27 PM
To: Lance Campbell <lance@illinois.edu>
Cc: "pgsql-sql@postgresql.org" <pgsql-sql@postgresql.org>
Subject: Re: Find and replace

 

 



On Sep 11, 2019, at 2:24 PM, Campbell, Lance <lance@illinois.edu> wrote:

 

PostgreSQL 10.x

 

I don’t know the best way to do this.  I need to do a find and replace in text fields.  The value I need to find and replace may occur more than once in each field per record. 

 

The value I am trying to match on:

Starts with a single { .

Ends with a single } .

In between these brackets can be the characters 0-9, a-z, A-Z, hyphens and underscores.  But no spaces.  These characters could be in any order.

The replacement value on a match is the same as what was found except for double {{ at the beginning and double }} at the end.  Same values between the brackets as what was matched on.

 

Example:

{ab_1D3-4} becomes {{ab_1D3-4}}

 

Thanks for helping me with this.

 

Lance Campbell

University of Illinois

 

Are there curly braces which don’t start/end such strings?  If not it might be easier to just double them up?

 



Re: Find and replace

От
Tom Lane
Дата:
"Campbell, Lance" <lance@illinois.edu> writes:
> I don’t know the best way to do this.  I need to do a find and replace in text fields.  The value I need to find and
replacemay occur more than once in each field per record. 

> The value I am trying to match on:
> Starts with a single { .
> Ends with a single } .
> In between these brackets can be the characters 0-9, a-z, A-Z, hyphens and underscores.  But no spaces.  These
characterscould be in any order. 
> The replacement value on a match is the same as what was found except for double {{ at the beginning and double }} at
theend.  Same values between the brackets as what was matched on. 

Sounds like a job for regular expressions.

regression=# select regexp_replace('abc{foo1}def{goo_bug}a', '{([-_a-zA-Z0-9]*)}', '{{\1}}', 'g');
       regexp_replace
----------------------------
 abc{{foo1}}def{{goo_bug}}a
(1 row)

See
https://www.postgresql.org/docs/current/functions-matching.html#FUNCTIONS-POSIX-REGEXP

            regards, tom lane