По умолчанию регулярное выражение соответствует символу новой строки в python - PullRequest
0 голосов
/ 21 марта 2020

Я хочу проверить, является ли данный ввод строки числом из шести цифр.

Допустимо:

  • 123456
  • 098765

Неверно:

  • 123
  • 12345a
  • as3445
  • / n123456
  • 123456 \ n

Мой python код

bool(re.match("^[0-9]{6}$",string))

, но это также соответствует "123456 \ n".

Почему это соответствует символу новой строки и как ограничить это соответствие?

1 Ответ

1 голос
/ 21 марта 2020

Как предлагается в комментарии, \Z: устанавливает позицию в конце строки или перед разделителем строки прямо в конце строки

values = ["123456", "098765", "Invalid:", "123", "12345a", "as3445", "/n123456", "123456\n"]
for v in values:
    print("{:10s} {}".format(v, bool(re.match("^[0-9]{6}\Z", v))))


123456     True
098765     True
Invalid:   False
123        False
12345a     False
as3445     False
/n123456   False
123456
    False
...