Как проверить строку с помощью регулярного выражения - PullRequest
0 голосов
/ 30 апреля 2019

Есть такая строка - «1,2,3; 45,25,65; 4,2,78». И я хочу проверить это регулярным выражением так, что:

  • Количество цифр подстроки перед точкой с запятой постоянным для каждая подстрока перед точкой с запятой. Например, в строке выше это число равно 3.
  • Строка не заканчивается точкой с запятой;

Примеры строк:

  • "1,2,3; 3,4,7" соответствует
  • "1,2,3" соответствует
  • "1,2; 3,4;" не соответствует (потому что ";" в конце)

1 Ответ

0 голосов
/ 30 апреля 2019

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

^\d+(,\d){n-1}(;\d+(,\d){n-1})*$

Где n-1 - ваша постоянная вычитающая 1 (в приведенном выше примере n-1 = 2). См. Демонстрацию .


Вместо этого всегда работает итерационный метод:

def my_match(s) :
  k = None
  for arr in s.split(";") :
    length = len(arr.split(","))
    if k :
      if k != length : return False
    else :
      k = length
  return True

input = "1,2,3;45,25,65;4,2,78" # we assume that the input synthax is correct
print my_match(input)

Если вы не предполагаете, что входной синтакс является правильным, используйте сначала ТимРегулярное выражение Бигелейзена (что-то вроде ^\d+(,\d)*(;\d+(,\d)*)*$) для проверки, а затем метод, описанный выше.

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