web-dev-qa-db-ja.com

Python-文字列全体を照合するためにreを使用するにはどうすればよいですか

ユーザーが入力したテキストを検証して、文字のみを受け入れ、数字は受け入れないようにしています。これまでのところ、数字(56など)を入力するとコードは正常に機能しますが、文字のみを入力する必要があり、文字を入力しても何も返されない(本来のように)という警告が表示されます。私の問題は、文字の後に数字を入力することから始めたときにそれを受け入れることです。 (s45)。最初の文字を受け入れますが、文字列全体を受け入れることはありません。文字列全体を受け入れるために必要です。

def letterCheck(aString):
    if len(aString) > 0:
        if re.match("[a-zA-Z]", aString) != None:
            return ""
    return "Enter letters only"
17
Thomas

それを最初と最後に固定し、1つ以上の文字に一致させます:

_if re.match("^[a-zA-Z]+$", aString):
_

ここで、_^_は文字列の先頭に固定され、_$_は末尾に固定され、_+_は1つ以上の文字に一致することを確認します。

ただし、代わりに str.isalpha() を使用する方がよいでしょう。ここで巨大な正規表現ハンマーに手を伸ばす必要はありません:

_>>> 'foobar'.isalpha()
True
>>> 'foobar42'.isalpha()
False
>>> ''.isalpha()
False
_
40
Martijn Pieters

次のように、正規表現+生の文字列で境界を使用して正規表現をエンコードします。

r"^[a-zA-Z]+$"
4
Aprillion

文字列にisalpha()を使用することを検討してください。文字列に英字しか含まれていない場合はtrueを返し、それ以外の場合はfalseを返します。

if aString.isalpha():
   do something
else:
   handle input error
3
sizzzzlerz

あなたがかなりPythonicの文章を探しているなら、isalphaとisdecimalを探してください:

str = u"23443434";
print str.isdecimal();
0
Louis