Как проверить, содержит ли строка только буквенно-цифровые символы и тире?


Строка, которую я тестирую, может быть сопоставлена с [w-]+. Могу ли я проверить, соответствует ли строка этому в Python, вместо того, чтобы иметь список запрещенных символов и тестировать для этого?

4 17

4 ответа:

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

import re
valid = re.match('^[\w-]+$', str) is not None

Python также имеет регулярное выражение:

import re
if re.match('^[\w-]+$', s):
    ...

Или вы можете создать список разрешенных символов:

from string import ascii_letters
if all(c in ascii_letters+'-' for c in s):
    ...

Без импорта какого-либо модуля, просто используя чистый python, удалите все none alpha, numeric, кроме тире.

string = '#Remove-*crap?-from-this-STRING-123$%'

filter_char = lambda char: char.isalnum() or char == '-'
filter(filter_char, string)

# This returns--> 'Remove-crap-from-this-STRING-123'

Или в одной строке:

''.join([c for c in string if c.isalnum() or c in ['-']])

Чтобы проверить, содержит ли строка только буквенно-цифровые и тире, я бы использовал

import re
found_s = re.findall('^[\w-]+$', s)
valid = bool(found_s) and found_s[0] == s