.lower()和同一行中的正则表达式?

时间:2018-01-26 21:20:55

标签: python regex lowercase

我有一个正则表达式,可以消除所有非字母字符

def genLetters(string):
  regex = re.compile('[^a-zA-Z]')
  newString = regex.sub("", string)  

如果我想将这个字符串设为小写,我必须定义一个新字符串(因为它们是不可变的),如
lowerString = newString.lower()
对我来说似乎是愚蠢的,我必须制作第二个字符串才能降低,但是如果我从正则表达式中移除A-Z,我会丢失任何大写的字符,我不想要。我只想要一切小写的最终产品。

这可以在没有lowerString的情况下完成,甚至更酷,可以在一行中完成吗?

1 个答案:

答案 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