postgres regexp_replace 否定连续字符组的存在
postgres regexp_replace negate presence of consecutive groups of chars
我有一个数据库导出,其中包含一些错误的字符替换(如 è => e')。所以我必须在 postgres 中将其改回。
我要疯狂地制作一个能捕捉到这样的东西的多合一正则表达式:
cassine' de' pecche' e'
必须变成
cassinè de' pecchè è
(de'不得更改).
我成功通过了两次:
UPDATE mytable SET comun1=UPDATE mytable SET comun1=regexp_replace(column1,'([^dnNn])(e\'')', 'è', 'g');
UPDATE mytable SET comun1=UPDATE mytable SET comun1=regexp_replace(column1,'([^\s])([dnNn])(e\'')', 'è', 'g');
基本上我想排除替换 space 后跟 d 或 n 后跟 e'(如“de'”)并在所有其他情况下更改 e'。
我尝试了 (?!\s[nNdD])(e\'')
但它仍然将“de'”更改为“dè”
有人对此有解决方案吗?
select regexp_replace($$cassine' de' pecche' e'$$, $$(\s[^dn]?|\w\w)e'$$, 'è', '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
我有一个数据库导出,其中包含一些错误的字符替换(如 è => e')。所以我必须在 postgres 中将其改回。
我要疯狂地制作一个能捕捉到这样的东西的多合一正则表达式:
cassine' de' pecche' e'
必须变成
cassinè de' pecchè è
(de'不得更改).
我成功通过了两次:
UPDATE mytable SET comun1=UPDATE mytable SET comun1=regexp_replace(column1,'([^dnNn])(e\'')', 'è', 'g');
UPDATE mytable SET comun1=UPDATE mytable SET comun1=regexp_replace(column1,'([^\s])([dnNn])(e\'')', 'è', 'g');
基本上我想排除替换 space 后跟 d 或 n 后跟 e'(如“de'”)并在所有其他情况下更改 e'。
我尝试了 (?!\s[nNdD])(e\'')
但它仍然将“de'”更改为“dè”
有人对此有解决方案吗?
select regexp_replace($$cassine' de' pecche' e'$$, $$(\s[^dn]?|\w\w)e'$$, 'è', '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