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

我有一个文本,我想知道是否全部或大于 50% 的百分比是大写的。

多弗朗明哥带触摸屏 lorem ipsum

我尝试使用正则表达式(在此处找到解决方案):

rx = re.compile(r"^([A-Z ':]+$)", re.M)
upp = rx.findall(string)

但这会找到所有大写字母,我不知道是全部还是超过 50%(包括全部)都是大写的?

我只想给字母编号(所以没有数字、空格、新行等)


守候你守候我
浏览 222回答 3
3回答

慕尼黑5688855

您可以使用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的事实,并且为求和进行了适当的转换,这对于某些人来说可能过于隐含。

慕无忌1623718

正则表达式在这里似乎有点矫枉过正。您可以使用sum生成器表达式:x = 'DOFLAMINGO WITH TOUCH SCREEN lorem ipsum'x_chars = ''.join(x.split())  # remove all whitespacex_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 meanx_upper = mean(i.isupper() for i in s if not i.isspace()) > 0.5

largeQ

使用正则表达式,这是您可以做到的一种方式(假设这s是有问题的字符串):upper = re.findall(r'[A-Z]', s)lower = re.findall(r'[a-z]', s)percentage = ( len(upper) / (len(upper) + len(lower)) ) * 100它找到大写和小写字符的列表,并使用它们的长度获取百分比。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python