2014-11-21 39 views
0

所以我在PostgreSQL中有下表。正則表達式 - 刪除最後一個字面

這是一個測試表只能有一列route有路線名字的價值像

I-95 
US-95N 
I-95 S 

我想從所有的路由名稱中刪除尾隨方向的文字。

UPDATE <schema>.<table> 
SET route= regexp_replace(route, '%[:digit:](S|N|E|W)', '%[:digit:]', 'ig'); 

記錄沒有變化。任何人都知道我在這裏做錯了嗎?

+0

提供一些樣本值和預期結果是很好的形式。 *永遠*你的Postgres版本。 – 2014-11-21 18:03:14

回答

0

要刪除任何單個字母標誌着一個數字之後緊跟一個基本方向:

UPDATE tbl 
SET route = regexp_replace(route, '(\d)[SNEW]', '\1', 'ig') 

SQL Fiddle.

一個正回顧後比賽會更elgant,但遺憾的是隻有lookahead matches實現。所以我使用back-reference重新插入比賽中的第一個(捕獲)部分。

bracket expression[SNEW]是不是多分支 (S|N|E|W) ,這將需要​​在這種情況下,情況更簡單:(:?S|N|E|W)

+0

非常感謝。我對正則表達式相當陌生。欣賞鏈接以及:) – dahvyah 2014-11-21 18:31:21

+0

@dahvyah:增加了一個澄清。 – 2014-11-21 18:36:49

+0

所以我遇到一些更值來抓對此我無法刪除以下parenthesis..example值格蘭串美國航線: 'US-190N(費爾法克斯縣) US-190(費爾法克斯縣)' 我只是想爲上述記錄儲存US-190。我嘗試了您提供的SQL Fiddle鏈接中的代碼變體,但它不起作用。請給我建議我怎樣才能解決這個問題? – dahvyah 2014-12-02 19:44:31

相關問題