Перевірте, чи містить рядок лише пробіл


220

Як я можу перевірити, чи рядок містить лише пробіли?

Приклад рядків:

  • " " (простір, простір, простір)

  • " \t \n " (пробіл, вкладка, пробіл, нова лінія, пробіл)

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

Відповіді:


312

Використовуйте str.isspace()метод:

Поверніться, Trueякщо в рядку є лише символи пробілу, а в Falseіншому випадку є принаймні один символ .

Символ - це пробіл, якщо в базі даних символів Unicode (див. Unicodedata ) або загальною його категорією є Zs ("роздільник, пробіл"), або його двонаправлений клас є одним із WS, B або S.

Поєднайте це зі спеціальним корпусом для обробки порожнього рядка.

Можна також використати str.strip()та перевірити, чи результат порожній.


Це не вдається в Python 2.4, якщо рядок містить нерозривний пробіл, charcode U+00A0або ALT+160. Однак виправлено в Python 2.7.
Кумба

18
Майте на увазі, що це не перевіряється None, або''
Parth Mehrotra

1
У python 2.7.13, isspace () буде розглядати нерозривний простір як простір. Приємно!
Ічінг Чанг

Ви також можете виключити порожні рядки, і в такому випадку ви можете: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]

Чому вибір , щоб він повернеться Trueдо None?
AMC

32

Ви хочете скористатися isspace()методом

вул. isspace ()

Повернути істину, якщо в рядку є лише символи пробілу, а принаймні один символ, інакше помилковий.

Це визначено для кожного об'єкта рядка. Ось приклад використання для вашого конкретного випадку використання:

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()працює на струнах. Крім того, ОП не просив тестувати порожню рядок, а для рядка, який був усіма пробілами. Ваш другий метод не поганий. Крім того, ваші парени, що оточують умовне, не потрібні в python.
NeilK

1
Як не дивно, перший метод насправді хороший спосіб перевірити , чим жоден із символів простору, якщо замінити ==0з==1
Mad Фізик

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()метод піклується про звичні випадки вкладки, нового рядка тощо.


оскільки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 # string jeNullOrWhiteSpace.

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і ""фальшиве, тож ви можете просто:return not str or str.isspace()
Олександр -

Це досить однозначно.
AMC

@AMC ви могли б це детальніше розібратися, я не розумію, що ви намагаєтесь сказати.
широкосмуговий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.