如何在Python中检查字符是否为大写?


71

我有这样的字符串

>>> x="Alpha_beta_Gamma"
>>> words = [y for y in x.split('_')]
>>> words
['Alpha', 'beta', 'Gamma']

我想要输出说X不符合要求,因为列表单词的第二个元素以小写开头,如果字符串x = "Alpha_Beta_Gamma"则应打印符合要求的字符串


x =“ Alpha_BEta_Gamma”呢?
Cristian Ciupitu

好的捕获Alpha_BEta_Gamma毫无用处,因为应该是Alpha_Beta_Gamma
lisa

@cris:与问题完全无关,它当然不应该带有py3k标签。
SilentGhost 2010年

@SilentGhost:说py3k标记与主要问题无关时,您是对的,但是由于她的困扰,我添加了它print
Cristian Ciupitu

Answers:


64

也许你想要 str.istitle

>>> help(str.istitle)
Help on method_descriptor:

istitle(...)
    S.istitle() -> bool

    Return True if S is a titlecased string and there is at least one
    character in S, i.e. uppercase characters may only follow uncased
    characters and lowercase characters only cased ones. Return False
    otherwise.

>>> "Alpha_beta_Gamma".istitle()
False
>>> "Alpha_Beta_Gamma".istitle()
True
>>> "Alpha_Beta_GAmma".istitle()
False

好吧,尽管我根据最初给出的要求,这里的所有答案都是正确的,但我必须标记正确。
丽莎2010年

好吧,尽管我根据最初给出的要求,这里的所有答案都是正确的,但我必须将您的答案标记为正确。
丽莎2010年

82

要测试所有单词都以大写字母开头,请使用以下命令:

print all(word[0].isupper() for word in words)

>>> x =“ Alpha_beta_Gamma” >>>单词= [y表示x.split('_')中的y] >>>打印全部(word [0] .isupper()表示单词中的单词)文件“ <stdin >“,第1行打印全部(word中的单词为word [0] .isupper())^ SyntaxError:语法无效
lisa 2010年

1
@lisa:您有一个非常老的Python版本(<2.4)。写吧print all([word[0].isupper() for word in words])
Jochen Ritzel 2010年

2
@lisa:在Python3中使用,print(all...)因为它print是一个函数,而不是语句。
Cristian Ciupitu

@ THC4K:顺便说一下,旧版本的Python没有all()。它是或曾经在Google提供的图书馆中。
Cristian Ciupitu

@Cristian Ciupitu:没错,在Python3中,它也因语法错误而失败。我只是猜到问题是缺少生成器表达式。
Jochen Ritzel 2010年

5
x="Alpha_beta_Gamma"
is_uppercase_letter = True in map(lambda l: l.isupper(), x)
print is_uppercase_letter
>>>>True

所以你可以写成一个字符串


我认为您把它弄倒了-OP似乎希望当且仅当每个单词的第一个字母(且没有其他字母)是大写时才打印true,并且与您的单词一起,即使不满足条件,它也会打印true。
Fund Monica的诉讼

另外,那是怪异的python,看起来更像java而不是py ...列表理解将更多地是pythonic。
法比奥·迪亚斯

2
words = x.split("_")
for word in words:
    if word[0] == word[0].upper() and word[1:] == word[1:].lower():
        print word, "is conformant"
    else:
        print word, "is non conformant"

1
部分代码效率低下。您可以将其替换为word[0].isupper()
Cristian Ciupitu

1
而另一部分带有word[1:].islower()
NullUserException'9

4
@lisa:print是Python 3中的一个函数。请不要在不先思考并将Python 2的内容(如print语句)更改为Python 3的内容(如print函数)的情况下直接输入代码。另外,请不要说“给我一个错误”。请提供具体错误。
S.Lott

@ S.Lott感谢您的指导,因此在此处发布错误的预期准则是在评论部分发布的特定错误
lisa 2010年

2

您可以使用以下代码:

def is_valid(string):
    words = string.split('_')
    for word in words:
        if not word.istitle():
            return False, word
    return True, words
x="Alpha_beta_Gamma"
assert is_valid(x)==(False,'beta')
x="Alpha_Beta_Gamma"
assert is_valid(x)==(True,['Alpha', 'Beta', 'Gamma'])

这样,您就知道是否有效以及错误的单词


1

您可以使用此正则表达式:

^[A-Z][a-z]*(?:_[A-Z][a-z]*)*$

样例代码:

import re

strings = ["Alpha_beta_Gamma", "Alpha_Beta_Gamma"]
pattern = r'^[A-Z][a-z]*(?:_[A-Z][a-z]*)*$'

for s in strings:
    if re.match(pattern, s):
        print s + " conforms"
    else:
        print s + " doesn't conform"

如在键盘上所见


1
+1,但对于非英语字符(例如“Ălălalt”)可能会失败。
Cristian Ciupitu

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.