2010-09-08 8 views
50

Ich habe eine Zeichenfolge wie dieseWie überprüft man, ob ein Zeichen in Python in Großbuchstaben geschrieben ist?

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

ich ausgeben wollen sagen X nicht konformer als das ist das zweite Element der Liste Worten beginnt mit einem Kleinbuchstaben und wenn die Zeichenfolge x = "Alpha_Beta_Gamma" dann sollte es String konformes drucken

+0

Was ist mit einem x = "Alpha_BEta_Gamma"? –

+0

Guter Fang Alpha_BEta_Gamma ist inavlid wie es sein sollte Alpha_Beta_Gamma – lisa

+0

verwendest du Python3? –

Antwort

51

Vielleicht möchten Sie 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 
+0

Nun gut, ich muss alle richtig markieren, obwohl alle Antworten hier richtig waren basierend auf der ursprünglichen Anforderung i Hat gegeben. – lisa

+0

Nun, ich muss deine Antwort als richtig markieren, obwohl alle Antworten hier korrekt waren, basierend auf der ursprünglichen Anforderung, die ich gegeben hatte. – lisa

1

können Sie diese Regex verwenden:

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

Beispielcode:

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" 

Wie man sehen auf codepad

+1

+1, aber es könnte für nicht-englische Zeichen, z. "Ălălalt". –

53

Um zu testen, dass alle Wörter mit einem Großbuchstaben verwenden beginnen diese:

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

>>> x = "Alpha_beta_Gamma" >>> wörter = [y für y in x.split ('_')] >>> alle drucken (wort [0] .isupper() für wort in worte) Datei "", Zeile 1 Alles drucken (word [0] .isupper() für Wort in Worten) ^ SyntaxError: ungültige Syntax – lisa

+1

@lisa: Sie haben eine wirklich alte Python-Version (<2.4). Schreibe 'print all ([word [0] .isupper() für Wort in Worte])' stattdessen. –

+2

@lisa: In Python3 benutze 'print (all ...)' weil 'print' eine Funktion ist, keine Anweisung. –

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

Ein Teil des Codes ist ineffizient. Sie können es durch 'word [0] .isupper()' ersetzen. –

+1

Und der andere Teil mit 'word [1:].islower() ' – NullUserException

+0

Hallo ich benutze Python 3 und es gibt mir einen Fehler – lisa

2

Sie diesen Code verwenden können, :

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']) 

diese Weise wissen Sie, wenn gültig ist und was für ein Wort ist falsch

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

Sie können es in 1 string So schreiben

+0

Ich denke, Sie haben es rückwärts - OP scheint zu wollen, dass es wahr, wenn und nur wenn der erste Buchstabe (und kein anderes) jedes Wortes ist Großbuchstaben, und mit Ihren, druckt es wahr, selbst wenn die Bedingungen nicht erfüllt sind . –

Verwandte Themen