Регулярные координаты X / Y

У меня есть данные, которые соответствуют этому шаблону: (x|y), x а также y может быть отрицательным, и в этом случае знак - настоящее.
Я пытаюсь построить выражение регулярного выражения, чтобы соответствовать x и y.

Вот мое текущее выражение, которое мне кажется правильным, но не работает:

/\((-?\d+)\|(-?\d+)\)/

Вот необработанные данные:

‭(-112|‭‭-522‬‬)
‭(-112|‭‭522‬‬)
(112|-‭‭522‬‬)
(112|‭‭522‬‬)

Есть идеи?

5

Решение

В ваших тестовых данных есть несколько невидимых символов Unicode.

Удалите их, и ваше регулярное выражение работать просто отлично.

Например, ваш пример (-112|‭‭-522‬‬) на самом деле\u0028\u002d\u0031\u0031\u0032\u007c\u202d\u202d\u002d\u0035\u0032\u0032\u202c\u202c\u0029,

У вас есть несколько U+202D (Слева направо перезаписать) а также U+202C (ПОП-НАПРАВЛЕНИЕ ФОРМАТИРОВАНИЯ) там.

Если вы хотите разрешить это в своем регулярном выражении, вы можете включить их:

\(\p{Cf}*(-?\p{Cf}*\d+)\p{Cf}*\|\p{Cf}*(-?\p{Cf}*\d+)\p{Cf}*\)

Но картина становится довольно грязной. Я только что добавил кучу \p{Cf}* там, чтобы позволить этим персонажам. Обратите внимание, что вам все равно придется избавиться от символов между знаком минус и цифрами, прежде чем пытаться преобразовать захваченные подстроки в целые числа.

Вероятно, было бы гораздо проще просто заменить все, что соответствует \p{Cf}+ с пустой строкой, прежде чем продолжить ваш исходный шаблон.

4

Другие решения

Вы можете проверить это в Regexr, где я и придумал, но это должно сделать то, что вы ищете

Код регулярного выражения

/\((-?[0-9]+\.?[0-9]+)\|(-?[0-9]+\.?[0-9]+)\)/

Проверенные значения

(-112|-522)
(-112|522)
(112.35|-522)
(112|522.5)
0

Вы должны избежать знака минус с обратной косой чертой, как это \-, Это зарезервировано для моделей, таких как a-z

-3