将 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}
并替换为
谁能告诉我转换这种格式的正则表达式:
'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}
并替换为