23

嗨,我想使用 regexp_replace(或任何其他 postgres 函数,如果合理的话)用 '' 替换字符串中的字符,即删除它们。

使用 regexp_replace(('def4abcdef4ab','4', '','g') 我可以替换/删除所有出现的 '4',但我也想替换所有出现的 'e' 和 b' 在同一个过程中,而无需使用多个嵌套进程,例如 regexp_replace(regexp_replace(regexp_replace()))。

即我希望能够提供一个不同字符串的简短列表,然后应该用一个唯一的字符串替换。

有任何想法吗?提前非常感谢!

4

4 回答 4

31

规范的方法是使用字符类,就像这样,

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

虽然@alexius 的方法也可以处理字符串。

不确定是否非贪婪地量化表达式是否会使其更有效,例如 [4eb]+?.

于 2013-10-24T08:59:40.443 回答
8

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

于 2013-10-24T08:56:14.587 回答
8

单个字符替换不需要正则表达式使用翻译功能,即

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

如果您的字符串有多个字符长,请使用 replace()。即使是嵌套的,这也可能比正则表达式提供更好的性能。

于 2014-10-05T06:56:36.750 回答
3

好的,我自己找到了答案(在PostgreSQL 对字符串 \ varchar 的各种清理的帮助下):

select regexp_replace(
E'aśx€ ąsd, dsa w|adwf\n  YZas dw dgaa[aw] asdd',
'[^a-zA-Y0-9 ]',
'',
'g');
于 2013-12-04T11:50:30.867 回答