Строку, которую я тестирую, можно сопоставить с [\w-]+
. Могу ли я проверить, соответствует ли строка в Python, вместо того, чтобы иметь список запрещенных символов и тестирование для этого?
Как проверить, содержит ли строка только буквенно-цифровые символы и тире?
Ответ 1
Если вы хотите проверить строку на регулярное выражение, используйте re библиотеку
import re
valid = re.match('^[\w-]+$', str) is not None
Ответ 2
Python также имеет регулярное выражение:
import re
if re.match('^[\w-]+$', s):
...
Или вы можете создать список допустимых символов:
from string import ascii_letters
if all(c in ascii_letters+'-' for c in s):
...
Ответ 3
Чтобы проверить, содержит ли строка только буквенно-цифровые и тире, я бы использовал
import re
found_s = re.findall('^[\w-]+$', s)
valid = bool(found_s) and found_s[0] == s
Ответ 4
Без импорта какого-либо модуля только с использованием чистого python удалите любую альфа-цифру, кроме дефиса.
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 ['-']])