正则表达式 - 删除最后一个文字

时间:2014-11-21 17:47:47

标签: regex postgresql

所以我在PostgreSQL中有下表。

这是一个测试表,只有一列route具有路径名值,如

I-95
US-95N
I-95 S

我想从所有路径名中删除尾随方向文字。

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

记录没有变化。任何人都知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

在数字后立即删除任何表示主要方向的单个字母:

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

SQL Fiddle.

积极的后视匹配会更加优雅,但遗憾的是只有lookahead matches被实现。所以我使用back-reference重新插入匹配中的第一个(捕获的)部分。

bracket expression [SNEW]比多个分支 (S|N|E|W) 更简单,在这种情况下需要non-capturing parentheses:{{1 }}