Python字符串大小写处理与自定义iscapitalize实现
本文详解Python中字符串的大小写转换函数upper、lower、capitalize和title的用法,并介绍isupper、islower、istitle等判断方法。重点探讨Python未内置iscapitalize方法的原因,并通过结合translate方法实现自定义的iscapitalize函数,解决空字符串及纯数字字符串的判断问题。
复制代码 代码如下:
s = 'hEllo pYthon'
print s.upper()
print s.lower()
print s.capitalize()
print s.title()
运行上述代码,得到的输出结果如下:
HELLO PYTHON
hello python
Hello python
Hello Python
大小写状态判断
Python内置了isupper()、islower()和istitle()方法,用于检测字符串的大小写状态。需要特别注意以下两点:
1. Python并未提供iscapitalize()方法,下文将展示如何自行实现该功能,至于官方未提供的原因,目前尚无定论。
2. 当对空字符串调用isupper()、islower()或istitle()时,返回值均为False。
复制代码 代码如下:
print 'A'.isupper() #True
print 'A'.islower() #False
print 'Python Is So Good'.istitle() #True
#print 'Dont do that!'.iscapitalize() #错误,不存在iscapitalize()方法
自定义实现iscapitalize
1. 若仅通过比较原字符串与调用capitalize()后的字符串来判断,当输入为空字符串时,结果会返回True,这违背了前述第2点的规则。
def iscapitalized(s):
return s == s.capitalize( )有人想到在返回语句中加入len(s)>0的条件判断,但这存在缺陷。例如调用iscapitalize('123')时,由于数字字符串capitalize()后不变且长度大于0,会错误返回True,这并非预期结果。
2. 因此,我们可以借助前文提到的translate方法,检测字符串中是否包含英文字母。具体实现如下:
复制代码 代码如下:
import string
notrans = string.maketrans('', '')
def containsAny(str, strset):
return len(strset) != len(strset.translate(notrans, str))
def iscapitalized(s):
return s == s.capitalize( ) and containsAny(s, string.letters)
#return s == s.capitalize( ) and len(s) > 0 #如果s为数字组成的字符串,这个方法将行不通调用一下试试:
print iscapitalized('123')
print iscapitalized('')
print iscapitalized('Evergreen is zcr1985')
执行上述代码,输出结果如下:
False
False
True
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









