У меня есть данные, которые соответствуют этому шаблону: (x|y)
, x
а также y
может быть отрицательным, и в этом случае знак -
настоящее.
Я пытаюсь построить выражение регулярного выражения, чтобы соответствовать x и y.
Вот мое текущее выражение, которое мне кажется правильным, но не работает:
/\((-?\d+)\|(-?\d+)\)/
Вот необработанные данные:
(-112|-522)
(-112|522)
(112|-522)
(112|522)
Есть идеи?
В ваших тестовых данных есть несколько невидимых символов 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}+
с пустой строкой, прежде чем продолжить ваш исходный шаблон.
Вы можете проверить это в Regexr, где я и придумал, но это должно сделать то, что вы ищете
Код регулярного выражения
/\((-?[0-9]+\.?[0-9]+)\|(-?[0-9]+\.?[0-9]+)\)/
Проверенные значения
(-112|-522)
(-112|522)
(112.35|-522)
(112|522.5)
Вы должны избежать знака минус с обратной косой чертой, как это \-
, Это зарезервировано для моделей, таких как a-z