在最后一次出现' - '之后截断字符串。或者' |'

时间:2017-12-12 11:14:29

标签: regex postgresql lookahead

我正在使用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'

如何才能在最后一次出现' - '?

后删除后缀

谢谢!

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

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? 

答案 1 :(得分:1)

您可以匹配空格和连字符或管道符号,捕获它们,然后只匹配不等于捕获文本的其余字符串:

(- |\|)(?:(?!\1).)+$

替换为\1。必要时逃脱(您需要在E'...'字符串中使用双重转义)。

<强>详情

  • (- |\|) - - |符号
  • (?:(?!\1).)+ - 任何字符.),1次或多次出现(+),不会启动- 序列或不等于{{1} } - 取决于捕获到第1组的内容。
  • | - 字符串结束。

请参阅regex demo