我使用 bash 腳本中的以下程式碼將 postgres 資料庫中標題列中的單引號替換為空格。
psql -U postgres -d my_database -c "UPDATE my_table SET title = regexp_replace(title, '''', ' ', 'g')"
我的問題是我打算刪除字串周圍的單引號,例如,如下所示:
this is example 'number one' ok
變成
this is example number one ok
這正如我所希望的那樣。
can't
變成
can t
如何指定我只想替換字串周圍的單引號。
答案1
我認為沒有什麼好的方法可以只用一種替換來做到這一點。但如果更換四次就可以了,請依照下列步驟操作:
替換
\A'
為(即替換
'
字串的開頭)。替換
'\Z
為(即
'
在字串末尾替換)。全域替換
([^[:alnum:]])'
為\1
(即將非字母數字字元 和 的每個序列替換'
為非字母數字字元 和)。
全域替換
'([^[:alnum:]])
為\1
(即將'
非字母數字字元的每個序列替換為非字母數字字元。)
最終效果是替換'
除前面的之外的所有內容和後面跟著一個字母數字字元。
免責聲明:我對 PostgreSQL 一無所知;你必須自己將其翻譯成 PostgreSQL 文法。
答案2
使用更聰明的正規表示式:如果替換“ '
”和“ '
”(SPACE APOSTROPHE和APOSTROPHE SPACE),您將錯過單字內的撇號。
答案3
如果您想避免單字中出現撇號,請尋找左右沒有字母的撇號。尋找此類撇號的可能正規表示式可能是
([A-Za-z])\'([^A-Za-z])|([^A-Za-z])\'([A-Za-z])|([^A-Za-z])\'([^A-Za-z])
或更短
\'([^A-Za-z])|([^A-Za-z])\'
甚至更短
\'([^\w])|([^\w])\'
我猜 regexp_replace 會是
regexp_replace(title, '\'([^\w])|([^\w])\'', '\1', 'g')
我不熟悉 psql,所以正確的 synatx 可能是
regexp_replace(title, '''([^\w])|([^\w])''', '\1', 'g')