如何正则表达式修复不完整的多边形

How to regex fix incomplete polygon

[[106.00,-50.00],[109.00,-34.00],[101.00,-29.00],[105.00,-26.00],
    [116.00,-30.00],[114.00,-50.00] ]

上面的示例没有绘制多边形,因为起点和终点坐标并不总是匹配。我该如何以编程方式解决此问题。

并不是所有的多边形都是这个长度。多边形可以有更多或更少的坐标。

我想获取起始组 ($1) 并将其添加到结尾(如果不匹配)。 我的正则表达式示例在这里,但我无法弄清楚如何获得第二组。 (即最后坐标)

https://regex101.com/r/mFWVle/1

以下是预期的最终结果,在正则表达式和替换 ;)

之后
[[106.00,-50.00],[109.00,-34.00],[101.00,-29.00],[105.00,-26.00],
[116.00,-30.00],[114.00,-50.00],[106.00,-50.00] ]

这是一个有效多边形的正则表达式,即起始坐标和结束坐标相同的多边形:

^\[(\[-?\d+(?:\.\d+)?,-?\d+(?:\.\d+)?\])(?:,\[-?\d+(?:\.\d+)?,-?\d+(?:\.\d+)?\])+,\]$

Demo

此模式仅匹配并捕获第一个坐标,然后断言此相同坐标作为多边形定义中的最终坐标出现。

我在这里假设多边形定义中没有空格。如果可能存在任意空格,我们可以更新正则表达式来应对它,但老实说,去掉所有空格然后按原样使用上面的模式可能更干净。

编辑:

如果您想要匹配一个多边形并通过 添加 将第一个坐标替换为末尾,并且坐标之间也可能有空格,则在该模式下查找:

^\[(\[-?\d+(?:\.\d+)?,-?\d+(?:\.\d+)?\])((?:\s*,\s*\[-?\d+(?:\.\d+)?,-?\d+(?:\.\d+)?\])+)\]$

并替换为:

,

Demo