我需要将任意字符串转换为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方法是什么?
答案 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模块,并删除所有无效的字符。