1

我有一个带有一些错误字符替换的数据库导出(如è => e')。所以我必须在postgres中把它改回来。
我要疯狂地制作一个能够捕捉到这样的东西的多合一正则表达式:

cassine' de' pecche' e'

它必须成为

cassinè de' pecchè è

(de' 不能改变)。

我设法通过两次通过:

UPDATE mytable SET comun1=UPDATE mytable SET comun1=regexp_replace(column1,'([^dnNn])(e\'')', '\1\2è', 'g');   

UPDATE mytable SET comun1=UPDATE mytable SET comun1=regexp_replace(column1,'([^\s])([dnNn])(e\'')', '\1\2è', 'g'); 

基本上我想从替换中排除一个空格,后跟 d 或 n,后跟 e'(如“de'”)并在所有其他情况下更改 e'。
我试过(?!\s[nNdD])(e\'')但它仍然将“de'”更改为“dè”

有人对此有解决方案吗?

4

1 回答 1

1
select regexp_replace($$cassine' de' pecche' e'$$, $$(\s[^dn]?|\w\w)e'$$, '\1è', 'gi')
    regexp_replace    
----------------------
 cassinè de' pecchè è
(1 row)

解释:

(\s[^dn]?|\w\w)e'
 ^       ^     ^ 
 |       |     followed by e'
 |       or 2 word chars
 space optionally followed by d or n
于 2015-02-11T16:46:39.243 回答