Как регулярное выражение исправить неполный полигон - PullRequest
1 голос
/ 06 мая 2019
[[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] ]

1 Ответ

1 голос
/ 06 мая 2019

Вот регулярное выражение для правильного многоугольника, то есть того, для которого начальная и конечная координаты совпадают:

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

Демо

Этот шаблон просто совпадает и захватывает первую координату, затем он утверждает, что эта же координата появляется в качестве конечной координаты в определении многоугольника.

Здесь я предполагаю, что в определении многоугольника нет пробелов.Если бы мог быть произвольный пробел, мы могли бы обновить регулярное выражение, чтобы справиться с этим, но, честно говоря, может быть чище просто убрать все пробелы и затем использовать приведенный выше шаблон как есть.

Редактировать:

Если вместо этого вы хотите сопоставить многоугольник и заменить его на , добавив первую координату к концу, и между координатами также могут быть пробелы, найдите по этому шаблону:

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

и замените на это:

$1$2,$1

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...