Я должен преобразовать произвольную строку в строку, которая является допустимым именем переменной в Python.
Вот очень простой пример:
s1 = 'name/with/slashes'
s2 = 'name '
def clean(s):
s = s.replace('/','')
s = s.strip()
return s
print clean(s1)+'_'#the _ is there so I can see the end of the string
Это - очень наивный подход. Я должен проверить, содержит ли строка недопустимые символы имени переменной, и замените их''
Каков был бы pythonic способ сделать это?
Согласно Python, идентификатор - это буква или знак подчеркивания, за которым следует неограниченная строка букв, цифр и знаков подчеркивания:
import re
def clean(s):
# Remove invalid characters
s = re.sub('[^0-9a-zA-Z_]', '', s)
# Remove leading characters until we find a letter or underscore
s = re.sub('^[^a-zA-Z_]+', '', s)
return s
Используйте так:
>>> clean(' 32v2 g #Gmw845h$W b53wi ')
'v2gGmw845hWb53wi'
Что ж, я бы хотел улучшить решение Триптиха ... однострочником!
>>> clean = lambda varStr: re.sub('\W|^(?=\d)','_', varStr)
>>> clean('32v2 g #Gmw845h$W b53wi ')
'_32v2_g__Gmw845h_W_b53wi_'
Эта подстановка заменяет любой неподходящий для переменных символ подчеркиванием и вставляет подчеркивание впереди, если строка начинается с цифры. IMO, 'name / with / slashes' лучше выглядит как имя переменной name_with_slashes
, чем как namewithslashes
.
Вы должны создать регулярное выражение, представляющее собой белый список допустимых символов, и заменить все, что не входит в этот класс символов.
Используйте модуль re и удалите все недопустимые символы.