我有一个正则表达式,可以消除所有非字母字符
def genLetters(string):
regex = re.compile('[^a-zA-Z]')
newString = regex.sub("", string)
如果我想将这个字符串设为小写,我必须定义一个新字符串(因为它们是不可变的),如
lowerString = newString.lower()
对我来说似乎是愚蠢的,我必须制作第二个字符串才能降低,但是如果我从正则表达式中移除A-Z
,我会丢失任何大写的字符,我不想要。我只想要一切小写的最终产品。
这可以在没有lowerString
的情况下完成,甚至更酷,可以在一行中完成吗?
答案 0 :(得分:3)
newString = regex.sub("", string).lower()
尝试考虑"函数返回" as"用函数"的返回值替换函数调用。例如,在上面的例子中,首先评估regex.sub
,你应该想象该调用被返回值替换:
newString = "some String after substitution".lower()
这意味着您可以对返回值regex.sub
上的字符串执行所有操作。您还可以在lower()
的返回值上调用方法。
这也意味着你可以在一行中完成整个功能!
newString = re.compile('[^a-zA-Z]').sub("", string).lower()
虽然这可能不太可读。
顺便说一下,python中的标准命名约定不是camel case,而是带有下划线,因此newString
应该是new_string
。