Python 3 полных соответствия регулярному выражению - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь найти строку, которая должна иметь символы AZ, az и 0-9. Если это не так, он возвращает ошибку.

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

if re.fullmatch('[A-Za-z0-9]', nickname):
  print("Yes")

Вот что я делаю, но это не так Кажется, он работает.

Ответы [ 2 ]

1 голос
/ 25 января 2020

Просто из интереса сделал это:

# in ipython for the %timeit magick

nickname = 'abcdqajsdkfl83490'
alphanum = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

%timeit nickname.isalnum()
324 ns ± 4.24 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

import re
%timeit re.fullmatch("[A-Za-z0-9]+", nickname)
1.77 µs ± 15.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit re.match("^[A-Za-z0-9]+$", nickname)
1.82 µs ± 3.27 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit re.match("^[A-Za-z0-9]+$", nickname).span()[1] == len(nickname)
2.42 µs ± 27.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit all([x in alphanum for x in nickname])
3.22 µs ± 46.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit sum([x in alphanum for x in nickname]) == len(nickname)
4.02 µs ± 66.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

alnum = set(alphanum)
%timeit alnum.union(set(nickname)) == alnum
## 4.19 µs ± 71.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

import re
%timeit all([re.match("[A-Za-z0-9]", x) for x in nickname])
29.4 µs ± 560 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

победитель: .isalnum() как минимум на величину порядка!

0 голосов
/ 25 января 2020

Попробуйте добавить знак +:

if re.fullmatch('[A-Za-z0-9]+', nickname):
    print("Yes")

Без знака + он будет соответствовать только одному символу.

Если вам не нужно регулярное выражение, вы можете использовать более быстрый путь с isalnum:

if nickname.isalnum():
    print("Yes")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...