Home > Mobile >  How get name before first uppercase word excluding T-shirt
How get name before first uppercase word excluding T-shirt

Time:12-07

Products have names like

Product one white Adidas
Other product black Hill sheet
Nice T-shirt blue Brower company

How to get starting part of product name before first uppercase word starting from second word and up to first uppercase word excluding word T-shirt. Result from strings above should be

Product one white
Other product black
Nice T-shirt blue

Using Bohemian answer to question

Substring before first uppecase word excluding first word

regexp_replace('Nice T-shirt blue Brower company', '(?<!^)\m[A-ZÕÄÖÜŠŽ].*', '')

returns wrong result

Nice

How to modify regex so that it returns

Nice T-shirt blue

Using Postgres 12

CodePudding user response:

This regex works for your test cases:

^[A-Z][a-z ]*(T-shirt)?[a-z ]*

Explanation:

^: Start of line

[A-Z]: Any capital letter

[a-z ]*: zero or more characters that are either a lowercase letter or space

(T-shirt)?: The phrase T-shirt 0 or 1 times

[a-z ]*: same again

CodePudding user response:

Instead of doing a direct match, you can simply remove the part of the string (in this case from the last uppercase word to the end) that you do not need:

select regexp_replace(name, '(?<=\s)[A-Z] [a-zA-Z\s] $', '') from tbl

See fiddle.

  • Related