2017-12-12 1 views
2

私はPostgresを使用していて、最後に ' - 'または '|'が出現した後にすべてを削除したいと考えています。' - 'または '|'が最後に現れた後に文字列を切り捨てます。

'Trump tweets in China - how, and why does it matter? - BBC News' 

早すぎる切り捨てられます::のような文字列があることである

select regexp_replace(title, E'(- |\\|).+$', '') as title from articles 

問題:

'Trump tweets in China' 

は、どのように私はそれを削除することができ、これは私が思いついたクエリです接尾辞は ' - 'の最後の出現の後でなければなりません。

ありがとうございます!

+1

「E」(?:(?! - | \\ |)を試してください。)+ $ '' –

+0

ありがとうございました。今私は ' - 'や '|'空文字列を返します。どうすれば修正できますか? – kambi

+1

'E '( - | \\ |)(?:(?! - | \\ |)))+ $'' '\ 1'。または 'E '( - | \\ |)(?:(?!\\ 1))+ $'' –

答えて

1

あなたは、スペースとハイフンまたはパイプsymoblのいずれかと一致し、それらをキャプチャして、ちょうど撮影したテキストに等しくない場合、文字列の残りの部分と一致することがあります。

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

\1と置き換えてください。必要に応じてエスケープしてください(E'...'文字列でダ​​ブルエスケープを使用する必要があります)。

詳細

  • (- |\|)から-又は| シンボル
  • (?:(?!\1).)+いずれか - -シーケンスを開始するかしない任意のCHAR(.)、1つのまたはそれ以上の出現(+|に等しい - グループ1に取り込まれたものによって異なります。
  • $ - 文字列の最後。

regex demoを参照してください。

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? 
関連する問題