我用我的代碼這一行字符串中的計數大寫字母:方法isupper Unicode的友好
text = "Áno"
count = sum(1 for c in text if c.isupper())
此代碼返回0,預期爲1(作爲一個大寫) 我怎樣才能用unicode字符統計大寫字母? 感謝
我用我的代碼這一行字符串中的計數大寫字母:方法isupper Unicode的友好
text = "Áno"
count = sum(1 for c in text if c.isupper())
此代碼返回0,預期爲1(作爲一個大寫) 我怎樣才能用unicode字符統計大寫字母? 感謝
對於Python 2,你需要添加一個u
,您的字符串是不實際的Unicode:
text = u"Áno"
你也可以寫你的表達count = sum(c.isupper() for c in text)
,c.isupper()
將返回真或假使1或0。
In [1]: text = "Áno"
In [2]: count = sum(c.isupper() for c in text)
In [3]: count
Out[3]: 0
In [4]: text = u"Áno"
In [5]: count = sum(c.isupper() for c in text)
In [6]: count
Out[6]: 1
In [7]: text = "Áno".decode("utf-8")
In [8]: count = sum(c.isupper() for c in text)
In [9]: count
Out[9]: 1
在Python 2,str.isupper()
方法僅適用於ASCII字符。你幾乎可以肯定有一個Python 2字節字符串,它將取決於你在那裏確切的字節的編碼,但它們不會是有效的ASCII字節。
解碼字符串爲Unicode值或使用Unicode文本(u'Áno'
),使unicode.isupper()
可根據Unicode標準確定大寫字符:
>>> u'Áno'[0].isupper()
True
您可能需要Python和Unicode的閱讀起來:
的英文單詞有所有英文大寫字母的模塊。如果你把你所有的英文大寫字母在一個變量,下面的代碼也工作:
import string
a=string.ascii_uppercase
s='ThiS is A tEst'
count=0
for i in s:
if i in a:
count+=1
print(count)
(1)如果是Python的2那麼也應該在頂部的編碼聲明(允許非ASCII字符串文字)。 (2)您還可以添加'from __future__ import unicode_literals'來使Unicode成爲字符串文本的默認值。 (3)如果你只對True/False感興趣,那麼'any(c.isupper()for c in text)'。 – jfs 2015-04-05 17:44:13