Как преобразовать строку в допустимое имя переменной в 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.