Как я могу преобразовать строку в правильное имя переменной в Python? - PullRequest
17 голосов
/ 21 июля 2010

Мне нужно преобразовать произвольную строку в строку, которая является допустимым именем переменной в 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

Это очень наивный подход.Мне нужно проверить, содержит ли строка недопустимые символы имени переменной, и заменить их на ''

. Каков был бы питонский способ сделать это?

Ответы [ 4 ]

36 голосов
/ 22 июля 2010

Что ж, я бы хотел получить лучшее решение от Триптиха с ... однострочником!

>>> 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.

26 голосов
/ 22 июля 2010

Согласно 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'
4 голосов
/ 22 июля 2010

Вы должны создать регулярное выражение, представляющее собой белый список допустимых символов, и заменить все, что не входит в этот класс символов.

0 голосов
/ 22 июля 2010

Используйте модуль re и удалите все недействительные символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...