如何无需额外字符串,或一行结合正则与.lower()实现纯小写输出?
当然可以搞定!你的思路其实已经很清晰了,只是没意识到字符串方法可以链式调用——这正是解决你问题的关键。
首先,我们可以直接把剔除非字母字符和转小写的操作合并,完全不需要额外定义lowerString甚至newString:
import re def genLetters(string): regex = re.compile('[^a-zA-Z]') return regex.sub("", string).lower()
为什么这样可行?
虽然字符串是不可变类型,但regex.sub()会返回一个新的字符串对象,我们可以直接在这个返回值上调用.lower()方法,一步得到全小写的纯字母字符串,省去了中间变量的冗余。
如果追求极致简洁,甚至可以把正则编译和操作都揉进一行(用lambda表达式):
import re genLetters = lambda string: re.sub('[^a-zA-Z]', '', string).lower()
不过这种写法适合简单场景,要是后续需要扩展逻辑,还是用普通函数的可读性更好。
关于你的顾虑
保留[^a-zA-Z]的正则是完全正确的——这样能先把所有大小写字母都保留下来,再统一转小写,既不会丢失原有的大写字符信息(毕竟你要的是最终全小写,原大写转成小写就达到目的了),又避免了只匹配小写字母导致的字符丢失问题。
内容的提问来源于stack exchange,提问作者Podo
相关产品推荐
相关产品推荐

