web-dev-qa-db-ja.com

postgres regexp_replaceを使用して、常に同じ文字列で文字列のリストを置き換える

こんにちは、regexp_replace(または妥当であれば他のpostgres関数)を使用して、文字列内の文字を ''で置き換えます。つまり、それらを消去します。

Regexp_replace(( 'def4abcdef4ab'、 '4'、 ''、 'g')を使用すると、 '4'のすべての出現を置換/消去できますが、同じプロセスで 'e'およびb 'の出現もすべて置換したいです、regexp_replace(regexp_replace(regexp_replace()))のようないくつかのネストされたプロセスを使用せずに。

つまり、異なる文字列の短いリストを提供できるようにしたいので、それを一意の文字列に置き換える必要があります。

何か案は?事前に感謝します!

19
sal

わかりました自分で答えを見つけました( PostgreSQLの文字列\ varcharのさまざまなクリーンアップ ):

select regexp_replace(
E'aśx€ ąsd, dsa w|adwf\n  YZas dw dgaa[aw] asdd',
'[^a-zA-Y0-9 ]',
'',
'g');
1
sal

標準的な方法は、文字クラスを使用することです。

regexp_replace('def4abcdef4ab','[4eb]', '','g')

ただし、@ alexiusのメソッドは文字列も処理できます。

おそらく貪欲ではない式の定量化がより効率的になるかどうかはわかりませんe.g。[4eb]+?

23
Andrew Cheong

単一文字の置換に正規表現は必要ありません

translate('def4abcdef4ab','4eb', '')

文字列が複数文字の場合、replace()を使用します。ネストされていても、正規表現よりもパフォーマンスが向上する可能性があります。

6
Rob McDonell

regexp_replace('def4abcdef4ab','4|e|b', '','g')

5
alexius