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