2014-11-21 40 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

相关问题