Regex, чтобы занять место после запятой в списке - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу требовать пробел после каждой запятой в списке.У меня есть это, которое работает очень хорошо для моих списков, которые имеют от 5 до 7 цифр, разделенных запятыми.^([^,]{5,7},)*[^,][^ ]{5,7}$Проблема в том, что это позволяет 12345,12345.Я не хочу, чтобы это прошло.12345, 12345 должны пройти.Мне также нужно пройти только 12345, поэтому запятая и пробел не требуются, если это всего лишь одно 5-7-значное число.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Ваше регулярное выражение не соответствует 12345,12345, поскольку эта часть ([^,]{5,7},)* будет совпадать с самого начала, включая запятую.

Тогда он не соответствует запятой [^,], которая будет соответствовать второму 1, а затем должен совпадать не с пробелом [^ ]{5,7}, но для сопоставления осталось только 4 символа 2345 ион не может совпадать.

Если первая часть терпит неудачу, он пытается соответствовать [^,][^ ]{5,7}, что в целом соответствует 6-8 символам.

Вы можете использовать:

^[^,\s]{5,7}(?:, [^,\s]{5,7})*$

Regex demo

  • ^ Начало строки
  • [^,\s]{5,7} Совпадение не с пробельным символом запятой 5 - 7 раз
  • (?: Группа без захвата
    • , [^,\s]{5,7} Совпадение с запятой, пробелом, а не с запятой или пробелом 5-7 раз
  • )* Закрытьгруппа без захвата и повторять 0+ раз
  • $ Конец строки
0 голосов
/ 21 декабря 2018

Я не понял вашего регулярного выражения, но что-то настолько простое, как это должно работать:

^(?:\d{5,7}, )*\d{5,7}$

Или, если вы не намеревались разрешить использование только цифр,

^(?:[^, ]{5,7}, )*[^, ]{5,7}$
...