如何在第一个大写单词前获取名称(T-shirt除外)



产品名称为

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

如何在第一个大写单词之前获得产品名称的开头部分,从第二个单词开始,直到第一个大写单词(不包括单词T-shirt)。以上字符串的结果应该是

Product one white
Other product black
Nice T-shirt blue

用波西米亚式的答案回答问题

第一个大写单词前的子字符串,不包括第一个单词

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

返回错误结果

Nice

如何修改正则表达式使其返回

Nice T-shirt blue
使用Postgres 12

使用否定的展望:

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

查看现场演示

(?!T-shirt)表示以下字符不能为' t - t'

可以添加其他要忽略的大写术语:

(?!T-shirt|BB gun|BBQ tongs)

这个正则表达式适用于您的测试用例:

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

解释:

^: Start of line

[A-Z]:任意大写字母

[a-z ]*: 0个或多个小写字母或空格

(T-shirt)?:短语T-shirt0或1次

[a-z ]*: same again

不直接匹配,您可以简单地删除字符串中不需要的部分(在本例中是从最后一个大写单词到末尾):

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

看到小提琴。

相关内容

  • 没有找到相关文章

最新更新