如何在python中将字符串转换为有效的变量名?

时间:2010-07-21 19:59:30

标签: python validation string variables

我需要将任意字符串转换为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方法是什么?

4 个答案:

答案 0 :(得分:36)

好吧,我想最好用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

答案 1 :(得分:26)

According to 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 :(得分:4)

您应该构建一个正则表达式,该正则表达式是允许字符的白名单,并替换该字符类中不存在的所有内容。

答案 3 :(得分:0)

使用re模块,并删除所有无效的字符。