检查字符串的所有字符是否都是大写
Check if all characters of a string are uppercase
假设我有一个可以包含不同字符的字符串:
例如word = "UPPER£CASe"
我将如何测试字符串以查看是否所有字符都是大写并且没有其他标点符号、数字、小写字母等?
您可以使用正则表达式:
all_uppercase = bool(re.match(r'[A-Z]+$', word))
你应该使用 str.isupper()
and str.isalpha()
函数。
例如
is_all_uppercase = word.isupper() and word.isalpha()
根据文档:
S.isupper() -> bool
Return True
if all cased characters in S
are uppercase and there is at
least one cased character in S
, False
otherwise.
Yash Mehrotra 对该问题有最佳答案,但如果您还想知道如何在没有这些方法的情况下进行检查,纯粹出于教育原因:
import string
def is_all_uppercase(a_str):
for c in a_str:
if c not in string.ascii_uppercase:
return False
return True
您也可以在角色级别上工作。
以下函数不仅对单词有用,对短语也有用:
def up(string):
upper=[ch for ch in string if ch.isupper() or ch.isspace()]
if len(upper)==len(string):
print('all upper')
else:
print("some character(s) not upper")
strings=['UPPERCAS!', 'UPPERCASe', 'UPPERCASE', 'MORE UPPERCASES']
for s in strings:
up(s)
Out: some character(s) not upper
Out: some character(s) not upper
Out: all upper
Out: all upper
在这里您可以找到一种非常有用的方法来检查字符串中是否至少有一个大写字母或小写字母
这是我在这篇 link 中找到的一个简短示例:
print(any(l.isupper() for l in palabra))
https://www.w3resource.com/python-exercises/python-basic-exercise-128.php
使用与 Diogo Martins 相同的方法,但使用 all()
和生成器作为 for/if/return
构造的替代方案,以获得更优雅和 pythonic 的解决方案:
import string
is_all_uppercase = all(c in string.ascii_uppercase for c in word)
它通过只测试每个字符一次来避免扫描字符串两次,并在第一个失败的字符上短路。
或者,进一步优化它:
upper = set('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
is_all_uppercase = all(c in upper for c in word)
但是,对于常见的输入,这 not 比公认的解决方案 word.isalpha() and word.isupper()
表现更好:通过使用 C 编译的内置方法,它胜过任何纯 python 解决方案,即使它扫描字符串两次:
$ python3 -m timeit -s 'word="UPPER£CASe"; upper=set("ABCDEFGHIJKLMNOPQRSTUWXYZ")' -- \
'all(c in upper for c in word)'
1000000 loops, best of 3: 0.514 usec per loop
$ python3 -m timeit -s 'word="UPPER£CASe"' -- 'word.isupper() and word.isalpha()'
10000000 loops, best of 3: 0.0446 usec per loop
请注意,str.isupper() and str.isalpha()
包括 Unicode 字符,例如希腊语、西里尔语(“俄语”)、阿拉伯语等。只要它们是大写的 ;-)
>>> word = "ΓΔΘΞΠΦΨΩБГДЖЙЛ"; word.isupper() and word.isalpha()
True
假设我有一个可以包含不同字符的字符串:
例如word = "UPPER£CASe"
我将如何测试字符串以查看是否所有字符都是大写并且没有其他标点符号、数字、小写字母等?
您可以使用正则表达式:
all_uppercase = bool(re.match(r'[A-Z]+$', word))
你应该使用 str.isupper()
and str.isalpha()
函数。
例如
is_all_uppercase = word.isupper() and word.isalpha()
根据文档:
S.isupper() -> bool
Return
True
if all cased characters inS
are uppercase and there is at least one cased character inS
,False
otherwise.
Yash Mehrotra 对该问题有最佳答案,但如果您还想知道如何在没有这些方法的情况下进行检查,纯粹出于教育原因:
import string
def is_all_uppercase(a_str):
for c in a_str:
if c not in string.ascii_uppercase:
return False
return True
您也可以在角色级别上工作。
以下函数不仅对单词有用,对短语也有用:
def up(string):
upper=[ch for ch in string if ch.isupper() or ch.isspace()]
if len(upper)==len(string):
print('all upper')
else:
print("some character(s) not upper")
strings=['UPPERCAS!', 'UPPERCASe', 'UPPERCASE', 'MORE UPPERCASES']
for s in strings:
up(s)
Out: some character(s) not upper
Out: some character(s) not upper
Out: all upper
Out: all upper
在这里您可以找到一种非常有用的方法来检查字符串中是否至少有一个大写字母或小写字母
这是我在这篇 link 中找到的一个简短示例:
print(any(l.isupper() for l in palabra))
https://www.w3resource.com/python-exercises/python-basic-exercise-128.php
使用与 Diogo Martins 相同的方法,但使用 all()
和生成器作为 for/if/return
构造的替代方案,以获得更优雅和 pythonic 的解决方案:
import string
is_all_uppercase = all(c in string.ascii_uppercase for c in word)
它通过只测试每个字符一次来避免扫描字符串两次,并在第一个失败的字符上短路。
或者,进一步优化它:
upper = set('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
is_all_uppercase = all(c in upper for c in word)
但是,对于常见的输入,这 not 比公认的解决方案 word.isalpha() and word.isupper()
表现更好:通过使用 C 编译的内置方法,它胜过任何纯 python 解决方案,即使它扫描字符串两次:
$ python3 -m timeit -s 'word="UPPER£CASe"; upper=set("ABCDEFGHIJKLMNOPQRSTUWXYZ")' -- \
'all(c in upper for c in word)'
1000000 loops, best of 3: 0.514 usec per loop
$ python3 -m timeit -s 'word="UPPER£CASe"' -- 'word.isupper() and word.isalpha()'
10000000 loops, best of 3: 0.0446 usec per loop
请注意,str.isupper() and str.isalpha()
包括 Unicode 字符,例如希腊语、西里尔语(“俄语”)、阿拉伯语等。只要它们是大写的 ;-)
>>> word = "ΓΔΘΞΠΦΨΩБГДЖЙЛ"; word.isupper() and word.isalpha()
True