在最后一次出现“-”或“|”后截断字符串
Truncate string after the last occurrence of '- ' or '|'
我正在使用 Postgres,并且想删除最后一次出现的“-”或“|”之后的所有内容。这是我提出的查询:
select regexp_replace( title, E'(- |\|).+$', '') as title from articles
问题是像这样的字符串:
'Trump tweets in China - how, and why does it matter? - BBC News'
过早被截断:
'Trump tweets in China'
如何让它只在最后一次出现“-”之后删除后缀?
谢谢!
你可以试试这个:
select regexp_replace ('Trump tweets in China - how, and why does it matter? - BBC News',
'[|-][^|-]*$', '')
基本上是说:
- 一个
|
或一个-
- 后跟字符串末尾既不是
|
也不是 -
的任意数量的字符
结果:
Trump tweets in China - how, and why does it matter?
您可以匹配 space 和连字符或竖线符号,捕获它们,然后只匹配不等于捕获文本的字符串的其余部分:
(- |\|)(?:(?!).)+$
替换为</code>。必要时转义(您需要在 <code>E'...'
字符串中使用双重转义)。
详情
(- |\|)
- -
或 |
符号
(?:(?!).)+
- 任何字符 (.
),出现 1 次或多次 (+
),不启动 -
序列或不等于 |
- 取决于捕获到第 1 组的内容。
$
- 字符串结尾。
参见regex demo。
我正在使用 Postgres,并且想删除最后一次出现的“-”或“|”之后的所有内容。这是我提出的查询:
select regexp_replace( title, E'(- |\|).+$', '') as title from articles
问题是像这样的字符串:
'Trump tweets in China - how, and why does it matter? - BBC News'
过早被截断:
'Trump tweets in China'
如何让它只在最后一次出现“-”之后删除后缀?
谢谢!
你可以试试这个:
select regexp_replace ('Trump tweets in China - how, and why does it matter? - BBC News',
'[|-][^|-]*$', '')
基本上是说:
- 一个
|
或一个-
- 后跟字符串末尾既不是
|
也不是-
的任意数量的字符
结果:
Trump tweets in China - how, and why does it matter?
您可以匹配 space 和连字符或竖线符号,捕获它们,然后只匹配不等于捕获文本的字符串的其余部分:
(- |\|)(?:(?!).)+$
替换为</code>。必要时转义(您需要在 <code>E'...'
字符串中使用双重转义)。
详情
(- |\|)
--
或|
符号(?:(?!).)+
- 任何字符 (.
),出现 1 次或多次 (+
),不启动-
序列或不等于|
- 取决于捕获到第 1 组的内容。$
- 字符串结尾。
参见regex demo。