Проверьте, содержит ли строка только пробел

220

Как я могу проверить, содержит ли строка только пробел?

Пример строки:

  • " " (пространство, пространство, пространство)

  • " \t \n " (пробел, табуляция, пробел, перевод строки, пробел)

  • "\n\n\n\t\n" (новая строка, новая строка, новая строка, вкладка, новая строка)

bodacydo
источник

Ответы:

312

Используйте str.isspace()метод:

Возврат, Trueесли в строке есть только пробельные символы, и если есть хотя бы один символ, в Falseпротивном случае.

Символ является пробелом, если в базе данных символов Unicode (см. Unicodedata ) либо его общая категория - Zs («Разделитель, пробел»), либо двунаправленный класс - WS, B или S.

Объедините это с особым случаем для обработки пустой строки.

Кроме того, вы можете использовать str.strip()и проверить, если результат пуст.

Владислав
источник
Это терпит неудачу в Python 2.4, если строка содержит неразрывный пробел, код символа U+00A0или ALT+160. Выглядит исправлено в Python 2.7, однако.
Кумба
18
Имейте в виду, что это не проверяет None, или''
Parth Mehrotra
1
В python 2.7.13 isspace () будет рассматривать неразрывный пробел как пробел. Ницца!
Iching Chang
Вы также можете исключить пустые строки, в этом случае вы можете сделать:if len(str) == 0 or str.isspace():
Джо
@ Джо 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]
Джон Мачин
источник
Почему выбор , чтобы он вернется Trueк None?
AMC
32

Вы хотите использовать isspace()метод

ул. isspace ()

Вернуть true, если в строке есть только пробельные символы и хотя бы один символ, в противном случае - false.

Это определено для каждого строкового объекта. Вот пример использования для вашего конкретного случая использования:

if aStr and (not aStr.isspace()):
    print aStr
Эрик Ван
источник
Разве это не то же самое решение, что и текущий топ и принятый ответ ?
AMC
6

Проверьте длину списка, заданного методом split ().

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

Или Сравните вывод метода strip () с нулем.

if your_string.strip() == '':
     print("yes")
Бхавеш Мунот
источник
1
Нет причин разбивать строку, len()работает со строками. Кроме того, OP не запрашивал проверку на пустую строку, а на строку, в которой были все пробелы. Ваш второй метод не плох, хотя. Кроме того, ваши парни, окружающие условные выражения, не нужны в python.
NeilK
1
Как ни странно, первый метод на самом деле хороший способ проверить, что ни один из символов не является пробелом, если вы замените его ==0на==1
Mad Physicist
if len(your_string.split())==0:-> if not your_string.split():, if your_string.strip() == '':-> if not your_string.strip():. В любом случае, первое уступает существующим решениям, а второе уже упоминалось в других ответах.
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()метод заботится о обычных случаях табуляции, перевода строки и т. П.

fralau
источник
так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)
Ahmed
источник
1

Сходство со статическим методом c # string 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 не могли бы вы уточнить это, я не понимаю, что вы пытаетесь сказать.
широкополосный