我有一个消除所有非字母字符的正则表达式
def genLetters(string):
regex = re.compile('[^a-zA-Z]')
newString = regex.sub("", string)
如果我想把这个字符串变成小写,我必须定义一个新的字符串(因为它们是不可变的),比如
lowerString = newString.lower()
对我来说,我必须制作第二个字符串只是为了降低它,这似乎很愚蠢,但是如果我从正则表达式中删除 A-Z ,我会丢失任何我没有的大写字符想。我只想要所有小写字母的最终产品。
这可以不用 lowerString 来完成吗,或者更酷,可以在一行中完成吗?
请您参考如下方法:
newString = regex.sub("", string).lower()
试着把“函数返回”想象成“用函数的返回值代替函数调用”。例如在上面的例子中,regex.sub 首先被计算,你应该想象那个调用被返回值所取代:
newString = "some String after substitution".lower()
这意味着您可以根据 regex.sub 的返回值对字符串执行任何操作。您还可以根据 lower() 的返回值调用方法。
这也意味着您可以在一行中完成所有功能!
newString = re.compile('[^a-zA-Z]').sub("", string).lower()
虽然这可能不太可读。
顺便说一下,python 中的标准命名约定不是驼峰式而是带下划线,所以 newString 应该是 new_string。
