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

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

Каков был бы pythonic способ сделать это?

18
задан Markus Meskanen 16 August 2016 в 06:18
поделиться

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'
28
ответ дан 30 November 2019 в 05:47
поделиться

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

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

40
ответ дан 30 November 2019 в 05:47
поделиться

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

4
ответ дан 30 November 2019 в 05:47
поделиться

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

0
ответ дан 30 November 2019 в 05:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: