为了账号安全,请及时绑定邮箱和手机立即绑定

Python,检查一个字符串有多少是大写的?

Python,检查一个字符串有多少是大写的?

守候你守候我 2021-08-24 17:11:29
我有一个文本,我想知道是否全部或大于 50% 的百分比是大写的。多弗朗明哥带触摸屏 lorem ipsum我尝试使用正则表达式(在此处找到解决方案):rx = re.compile(r"^([A-Z ':]+$)", re.M) upp = rx.findall(string)但这会找到所有大写字母,我不知道是全部还是超过 50%(包括全部)都是大写的?我只想给字母编号(所以没有数字、空格、新行等)
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

您可以使用filter和str.isalpha清除非字母字符并str.isupper计算大写字符并计算比率:


s = 'DOFLAMINGO WITH TOUCH SCREEN lorem ipsum'


alph = list(filter(str.isalpha, s))  # ['D', ..., 'O', 'W', ..., 'N', 'l', 'o', ...]

sum(map(str.isupper, alph)) / len(alph)

# 0.7142857142857143

另请参见上的文档sum和map您可能经常使用发现自己。此外,这使用了bool作为 的子类int的事实,并且为求和进行了适当的转换,这对于某些人来说可能过于隐含。


查看完整回答
反对 回复 2021-08-24
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

正则表达式在这里似乎有点矫枉过正。您可以使用sum生成器表达式:


x = 'DOFLAMINGO WITH TOUCH SCREEN lorem ipsum'


x_chars = ''.join(x.split())  # remove all whitespace

x_upper = sum(i.isupper() for i in x_chars) > (len(x_chars) / 2)

或功能上通过map:


x_upper = sum(map(str.upper, x_chars)) > (len(x_chars) / 2)

或者,通过statistics.mean:


from statistics import mean


x_upper = mean(i.isupper() for i in s if not i.isspace()) > 0.5


查看完整回答
反对 回复 2021-08-24
?
largeQ

TA贡献2039条经验 获得超7个赞

使用正则表达式,这是您可以做到的一种方式(假设这s是有问题的字符串):


upper = re.findall(r'[A-Z]', s)

lower = re.findall(r'[a-z]', s)

percentage = ( len(upper) / (len(upper) + len(lower)) ) * 100

它找到大写和小写字符的列表,并使用它们的长度获取百分比。


查看完整回答
反对 回复 2021-08-24
  • 3 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号