Регулярное выражение для необязательного символа между цифрами - PullRequest
0 голосов
/ 12 мая 2018

Мне нужно проверить строку, которая содержит подчеркивание (_) между числами.Символ подчеркивания является необязательным.Единственное условие , оно должно быть между числами .

Valid     => 123
Valid     => 1_23
Valid     => 123_4567_89_312_575

Not valid => 123_
Not valid => _123
Not valid => 123__12   (Two consecutive underscore characters)
Not valid => _         (Number is mandatory)
Not valid => abc       (only numbers and _ should be present)

Я пробовал это регулярное выражение

([0-9]+_*[0-9]+)*

Не удалось.Любая идея почему?

PS: Собираемся реализовать это на быстром языке.Основная логика: символ подчеркивания используется как разделитель для чисел.

Ответы [ 3 ]

0 голосов
/ 12 мая 2018

Просто это должно быть либо :

^[0-9]+(_[0-9]+)*$ или

^\d+(_\d+)*$,

оба означают, что они начинаются с любого числа (<number>), а затем имеют любое ( ноль или более ) число комбинаций подчеркивания и числа шаблона (_<number>).

ИЛИ наоборот,

([0-9]+_)*[0-9]+ или

(\d+_)*\d+,

оба значения начинаются с любого ( ноль или более ) числа комбинаций номера шаблона (<number>_) и подчеркивания; а затем иметь любое число (<number>).

0 голосов
/ 12 мая 2018

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

^\d+(_\d+)*$

enter image description here

0 голосов
/ 12 мая 2018

Ваш шаблон ([0-9]+_*[0-9]+)* соответствует 0+ повторений 1+ цифр, 0+ подчеркиваний и затем 1+ цифр.Таким образом, он может соответствовать 12, 3_______4, 2345 и пустой строке.В зависимости от того, в каком методе вы используете его, он может соответствовать частичной или целой строке.

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

^[0-9]+(?:_[0-9]+)*$

См. Демонстрационную версию regex

Если вы используете шаблон внутри NSPredicate с MATCHES, якоря ^ и $ не нужны, так как в этом случае вся строка должна соответствовать шаблону.

Подробности

  • ^ - начало строки
  • [0-9]+ - 1+ цифр
  • (?: - начало не захватагруппировка
    • _ - подчеркивание
    • [0-9]+ - 1+ цифр
  • )* - повторяет последовательность паттернов 0 или более раз
  • $ - конец строки.
...