将 GIS WKT 从 3D 转换为 2D 的正则表达式

Regex to convert GIS WKT from 3D to 2D

谁能告诉我转换这种格式的正则表达式:

'LINESTRING ZM ( 574084.51000000 4229857.57000000 0.00000000 0.00000000, 574095.03000000 4229848.23500000 0.00000000 0.00870000)'

至此

'LINESTRING ZM ( 574084.51000000 4229857.57000000, 574095.03000000 4229848.23500000)'

每个逗号之间只应保留前两个数字。这4个坐标集可能有任意个数

我尝试了以下(通过 oracle sql REGEXP_REPLACE 函数),但没有得到想要的结果(上面有详细说明)

select REGEXP_REPLACE( 
  'LINESTRING ZM ( 574084.51000000 4229857.57000000 0.00000000 0.00000000, 574095.03000000 4229848.23500000 0.00000000 0.00870000)',
  '(LINESTRING ZM )((([:digit:]+\.[:digit:]+ ){2})([:digit:]+\.[:digit:]+ ){2}(([:digit:]+\.[:digit:]+ ){2})([:digit:]+\.[:digit:]+ ){2})',
  '(, )'
 ) regex_output from dual;

http://www.sqlfiddle.com/#!4/cb0077/7

REGEXP_REPLACE(value, 
  '(( [0-9]+\.[0-9]{8}){2})( [0-9]+\.[0-9]{8}){2}',
  ''
)

根据我最初发现的一些使用了 [:digit:] 的文档,此答案的以下部分是错误的,切换到 [0-9] 解决了这个问题。只需要有人解决我的懒惰并为此提供一个功能测试平台。


好像你第一次问这个问题就被删了

这又是我的回答(在我花时间重新回答您删除并重新发布的问题时,格式正确并进行了一些调整):

(LINESTRING ZM )\((( [:digit:]+\.[:digit:]{8}){2})( [:digit:]+\.[:digit:]{8}){2},(( [:digit:]+\.[:digit:]{8}){2})( [:digit:]+\.[:digit:]{8}){2}\)

并替换为

(,)

编辑:如果有任意数量的论文点需要修剪,您可以匹配

等模式
( [:digit:]+\.[:digit:]{8}){2})( [:digit:]+\.[:digit:]{8}){2}

并替换为