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

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

Каким будет питонический способ сделать это?

23
George Profenza 21 Июл 2010 в 23:59

4 ответа

Лучший ответ

Согласно 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'
31
Triptych 21 Июл 2010 в 20:07

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

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

42
Nas Banov 22 Июл 2010 в 04:12

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

4
Daenyth 21 Июл 2010 в 20:01

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

0
John Howard 21 Июл 2010 в 20:03