Как преобразовать строку в допустимое имя переменной в python?
Мне нужно преобразовать произвольную строку в строку, которая является допустимым именем переменной в 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
Это очень наивный подход. Мне нужно проверить, не содержит ли строка
имена переменных и заменить их на "
Каким будет питонический способ сделать это?
Ответы
Ответ 1
В соответствии с 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'
Ответ 2
Хорошо, я бы хотел получить лучшее решение Triptych с... одним слоем!
>>> 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
.
Ответ 3
Вы должны создать регулярное выражение, представляющее собой белый список допустимых символов, и заменить все, что отсутствует в этом классе символов.
Ответ 4
Используйте модуль re и разделите все недопустимые charecters.