如何编写匹配WKT Polygon格式的正则表达式?
WKT Polygon格式匹配正则方案
基础版本(适配示例所示的无孔洞简单Polygon)
直接匹配POLYGON前缀、双括号包裹、整数/小数坐标的标准格式,正则如下:^POLYGON \(\((\s*-?\d+(?:\.\d+)?\s+-?\d+(?:\.\d+)?\s*,)*\s*-?\d+(?:\.\d+)?\s+-?\d+(?:\.\d+)?\s*\)\)$
各部分逻辑说明
^POLYGON:匹配开头固定标识,需要兼容大小写的话可开启正则的不区分大小写模式,或改为^[Pp][Oo][Ll][Yy][Gg][Oo][Nn]\(\(:匹配双左括号,括号为正则特殊字符需转义(\s*-?\d+(?:\.\d+)?\s+-?\d+(?:\.\d+)?\s*,)*:匹配多组末尾带逗号的坐标对,支持坐标前后带空格、负坐标、整数/小数格式的坐标值\s*-?\d+(?:\.\d+)?\s+-?\d+(?:\.\d+)?\s*:匹配最后一组无末尾逗号的坐标对\)\)$:匹配双右括号和字符串结尾,避免前后带多余无效字符
扩展适配说明
- 需支持带内环的Polygon格式(如
POLYGON ((0 0,0 1,1 1,1 0,0 0),(0.2 0.2,0.2 0.8,0.8 0.8,0.8 0.2,0.2 0.2)))时,可调整正则适配多组括号的结构 - 需支持科学计数法格式的坐标时,将正则中的
\d+(?:\.\d+)?替换为[+-]?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?即可 - 正则仅做格式校验,若需校验Polygon首尾坐标闭合、无自交等几何合法性,建议匹配格式后调用专业空间几何库(如shapely、JTS、GDAL)完成校验
提示:如果仅需提取文本中的WKT Polygon片段而非全字符串匹配,去掉正则首尾的
^和$即可。
内容的提问来源于stack exchange,提问作者getsuha
相关产品推荐
相关产品推荐

