Число регулярных выражений и дефис

#python #regex

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

Вопрос:

Я пытаюсь сопоставить число с регулярным выражением, таким как:

 34-7878-3523-4233
  

с помощью этого:

 ^[0-9][0-9-]*-[0-9-]*[0-9]$
  

Но выражение также позволяет

34—34———88

Итак, как я могу разрешить только один дефис между числом?

Ответ №1:

Ваше регулярное выражение:

Посмотрите на это в действии: Regexr.com

 ^[0-9] (-[0-9] ) $
  

Матчи:

 1-2
1-2-3
  

Не соответствует:

 1
1-
1-2-
1-2----3
1---3
  

Комментарии:

1. Спасибо, но для меня должен существовать хотя бы один дефис

Ответ №2:

Это потому, что вы включили дефис в разрешенные символы в вашем классе символов. Оно должно быть у вас снаружи.

Вы можете попробовать что-то вроде этого: —

 ^([0-9] -)*[0-9] $
  

Теперь это будет соответствовать 0 или более повторениям некоторых цифр, за которыми следует дефис. Затем одна или несколько цифр в конце.

Комментарии:

1. Это позволяет использовать только один дефис с одной цифрой, такой как 3-3-3 . Я хочу соответствовать, как 232424-42-2455

2. @vusan. Нет, теперь оно будет соответствовать нескольким цифрам. Я забыл ввести кванторы.

Ответ №3:

Используйте normal*(special normal*)* шаблон:

 ^[0-9] (-[0-9] ) $
  

где normal это [0-9] и special является -