Код Python для использования регулярного выражения для проверки строки является буквенно-цифровым плюс. - _

Я смотрел и искал и не мог найти то, в чем я нуждался, хотя я думаю, что это должно быть просто (если у Вас есть опыт Python, который я не делаю).

Учитывая строку, я хочу проверить в Python, что он содержит ТОЛЬКО алфавитно-цифровые символы: a-zA-Z0-9 и . _ -

примеры:

Принятый:

bill-gates

Steve_Jobs

Micro.soft

Отклоненный:

Bill gates - никакие пробелы не позволяются

me@host.com - не является алфавитно-цифровым

Я пытаюсь использовать:

if re.match("^[a-zA-Z0-9_.-]+$", username) == True:

Но это, кажется, не делает задание...

6
задан Warlax 25 March 2010 в 21:51
поделиться

4 ответа

re.match не возвращает логическое значение; он возвращает MatchObject при совпадении или None при несовпадении.

>>> re.match("^[a-zA-Z0-9_.-]+$", "hello")
<_sre.SRE_Match object at 0xb7600250>
>>> re.match("^[a-zA-Z0-9_.-]+$", "    ")
>>> print re.match("^[a-zA-Z0-9_.-]+$", "    ")
None

Итак, вы не должны делать re.match (...) == True ; скорее, вы должны проверить, что re.match (...) не равно None в этом случае, что может быть сокращено до , если re.match (...) .

18
ответ дан 8 December 2019 в 04:29
поделиться

Никогда не используйте == True или ] == Ложь в сравнении.Многие типы уже имеют эквивалент типа bool, который вы должны использовать вместо этого:

if re.match("^[a-zA-Z0-9_.-]+$", username):
4
ответ дан 8 December 2019 в 04:29
поделиться

Может также немного сократите его до:

if re.match(r'^[\w.-]+$', username):
2
ответ дан 8 December 2019 в 04:29
поделиться

Если вы собираетесь использовать много регулярных выражений, вы можете скомпилировать их для скорости (или читабельности)

import re 
ALPHANUM=re.compile('^[a-zA-Z0-9_.-]+$')

for u in users:
    if ALPHANUM.match(u) is None:
        print "invalid"

Из документации:

Скомпилированные версии последних шаблонов, переданных в re. match(), re.search() или re.compile(), кэшируются, поэтому программам, использующим только несколько регулярных выражений за раз, не нужно беспокоиться о компиляции регулярных выражений.

0
ответ дан 8 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: