文字列に空白のみが含まれているかどうかを確認する


219

文字列に空白のみが含まれているかどうかをテストするにはどうすればよいですか?

文字列の例:

  • " " (スペース、スペース、スペース)

  • " \t \n " (スペース、タブ、スペース、改行、スペース)

  • "\n\n\n\t\n" (改行、改行、改行、タブ、改行)

回答:


312

次のstr.isspace()方法を使用します。

True文字列に空白文字のみがあり、Falseそれ以外の場合は1文字以上ある場合に返します。

Unicode文字データベース(unicodedataを参照)内にある場合、その一般カテゴリがZ(「セパレーター、スペース」)であるか、その双方向クラスがWS、B、またはSのいずれかである場合、文字は空白です。

空の文字列を処理するための特別なケースと組み合わせてください。

または、str.strip()結果が空かどうかを使用して確認することもできます。


文字列に改行しないスペース、文字コード、U+00A0またはが含まれている場合、これはPython 2.4では失敗しますALT+160。ただし、Python 2.7では見た目は修正されています。
クンバ

18
これはチェックしませんことを覚えておいてくださいNone、または''
Parth Mehrotra

1
Python 2.7.13では、isspace()は改行しないスペースをスペースと見なします。いいね!
Iching Chang 2017

また、あなたが行うことができ、その場合には、同様に空の文字列を除外したい場合があります:if len(str) == 0 or str.isspace():
ジョー・

@Joe len(my_str) == 0も記述できますnot my_str
AMC

55
>>> tests = ['foo', ' ', '\r\n\t', '', None]
>>> [not s or s.isspace() for s in tests]
[False, True, True, True, True]

なぜそれを利用するという選択が戻るTrueNoneですか?
AMC

32

isspace()メソッドを使いたい

str。isspace()

文字列に空白文字のみがあり、少なくとも1つの文字がある場合はtrueを返し、それ以外の場合はfalseを返します。

それはすべての文字列オブジェクトで定義されています。以下は、特定のユースケースの使用例です。

if aStr and (not aStr.isspace()):
    print aStr

これは現在のトップで受け入れられている答えと同じ解決策ではありませんか?
AMC



6

split()メソッドで指定されたリストの長さを確認してください。

if len(your_string.split()==0:
     print("yes")

またはstrip()メソッドの出力をnullと比較します。

if your_string.strip() == '':
     print("yes")

1
文字列を分割する理由はなく、文字列でlen()動作します。また、OPは空の文字列をテストするように求めていませんでしたが、すべてスペースである文字列をテストしました。2番目の方法は悪くありません。また、条件文を囲む括弧はpythonでは必要ありません。
NeilK 2017年

1
不思議なことに、第1の方法は、実際よりも、チェックするための良い方法ですどれもあなたが交換した場合、文字のは、スペースではない==0==1
マッド物理学者

if len(your_string.split())==0:-> if not your_string.split():if your_string.strip() == '':-> if not your_string.strip():。いずれにせよ、1つ目は既存のソリューションよりも劣っており、2つ目は他の回答ですでに言及されています。
AMC

3

すべてのケースで機能するはずの答えは次のとおりです。

def is_empty(s):
    "Check whether a string is empty"
    return not s or not s.strip()

変数がNoneの場合、その位置で停止し、それnot s以上評価されません(以降not None == True)。どうやら、strip()メソッドはタブや改行などの通常のケースを処理します。


以来、not None == Trueそれはちょうど言うことはおそらく明確ですNone is False。また、==これらの比較には使用しないでください。
AMC

2

あなたのシナリオでは、空の文字列は本当に空の文字列か、すべて空白を含む文字列であると想定しています。

if(str.strip()):
    print("string is not empty")
else:
    print("string is empty")

これはチェックしないことに注意してください None


これはすでに既存の回答でカバーされていませんか?
AMC

2

私は以下を使用しました:

if str and not str.isspace():
  print('not null and not empty nor whitespace')
else:
  print('null or empty or whitespace')

null意味Noneですか?
AMC

1

文字列が単なるスペースか改行かを確認するには

この単純なコードを使用する

mystr = "      \n  \r  \t   "
if not mystr.strip(): # The String Is Only Spaces!
    print("\n[!] Invalid String !!!")
    exit(1)
mystr = mystr.strip()
print("\n[*] Your String Is: "+mystr)

1

c#文字列静的メソッドisNullOrWhiteSpaceとの類似性。

def isNullOrWhiteSpace(str):
  """Indicates whether the specified string is null or empty string.
     Returns: True if the str parameter is null, an empty string ("") or contains 
     whitespace. Returns false otherwise."""
  if (str is None) or (str == "") or (str.isspace()):
    return True
  return False

isNullOrWhiteSpace(None) -> True // None equals null in c#, java, php
isNullOrWhiteSpace("")   -> True
isNullOrWhiteSpace(" ")  -> True

次のことができますreturn (str is None) or (str == "") or (str.isspace())
アレクサンダー-モニカを復活させる

ああ、両方None""あなただけのことができるように、falsyです:return not str or str.isspace()
復活モニカ-アレクサンダー

これはかなり慣用的です。
AMC

@AMCはこれについて詳しく説明してもらえますか、私はあなたが何を言おうとしているのか理解できません。
ブロードバンド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.