产品名称为
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-shirt
0或1次
[a-z ]*
: same again
不直接匹配,您可以简单地删除字符串中不需要的部分(在本例中是从最后一个大写单词到末尾):
select regexp_replace(name, '(?<=s)[A-Z]+[a-zA-Zs]+$', '') from tbl
看到小提琴。