You mentioned whitespace in general, rather than just spaces. I stumbled upon a solution with isidentifier
. Per W3 schools:
A string is considered a valid identifier if it only contains alphanumeric letters (a-z) and (0-9), or underscores (_). A valid identifier cannot start with a number, or contain any spaces.
So, if this matches your requirements, isidentifier is quick and easy to use.
Somebody mentioned efficiency of regex, and I was curious:
import timeit
setup='import re; rs="s"; rc=re.compile(rs); s="applebananacanteloupe"'
stm1='re.search(rs,s)'
stm2='re.search(rc,s)'
stm3='" " in s'
stm4='s.isidentifier()'
timeit.repeat(stm1,setup)
# result: [0.9235025509842671, 0.8889087940042373, 0.8771460619755089, 0.8753634429886006, 1.173506731982343]
timeit.repeat(stm2,setup)
# results: [1.160843407997163, 1.1500899779784959, 1.1857644470001105, 1.1485740720236208, 1.2856045850203373]
# compiled slower than uncompiled? Hmm, I don't get regex...
timeit.repeat(stm3,setup)
# [0.039073383988579735, 0.03403249100665562, 0.03481135700712912, 0.034628107998287305, 0.03392893000273034]
timeit.repeat(stm4,setup)
# [0.08866660299827345, 0.09206177099258639, 0.08418851799797267, 0.08478381999884732, 0.09471498697530478]
So, isidentifier
is almost as fast as in
, and 10x faster than regex. Note that there is technically no guarantee that python’s idea of what an identifier is won’t change — but it’s also likely that if it did, your code would need some rework anyway.
str.isspace() returns False
for a valid and empty string
>>> tests = ['foo', ' ', 'rnt', '']
>>> print([s.isspace() for s in tests])
[False, True, True, False]
Therefore, checking with not
will also evaluate None
Type and ''
or ""
(empty string)
>>> tests = ['foo', ' ', 'rnt', '', None, ""]
>>> print ([not s or s.isspace() for s in tests])
[False, True, True, True, True, True]
Время чтения 2 мин.
Строковая функция String isspace() используется в Python для проверки того, содержит ли аргумент все пробельные символы, такие как:
- ‘ ‘ — Space
- ‘t’ – Horizontal tab
- ‘n’ — Newline
- ‘v’ — Vertical tab
- ‘f’ — Feed
- ‘r’ — Carriage return.
Содержание
- Что такое функция string isspace() в Python?
- Синтаксис
- Параметры
- Возвращаемое значение
- Примеры программ с методом isspace()
String.isspace() — это встроенный метод Python, который сообщает нам, содержит ли данная строка только символы пробела или нет. Метод isspace() возвращает true, если все символы строки являются пробелами, и возвращает false во всех остальных случаях.
Существуют различные типы пробельных символов, такие как ‘n’- новая строка, ‘ ‘-пробел, ‘t’- горизонтальная вкладка и многие другие. С помощью приведенных выше различных типов пробелов мы можем классифицировать, содержит ли наша строка только пробелы или нет, что мы можем проверить с помощью метода isspace().
Синтаксис
Здесь string — это строковая переменная, которая должна быть проверена, содержит ли она все символы, пробелы или нет.
Параметры
Метод String.isspace() не содержит никаких параметров и выдает ошибку при передаче любого параметра.
Возвращаемое значение
Метод возвращает true, если все символы в строке являются пробелами, и false во всех остальных случаях.
Примеры программ с методом isspace()
- Пример 1: Напишите программу, показывающую работающий метод isspace().
# app.py h1 = » « h2 = «Hello Boy» h3 = «nntnn» h4 = «HelloGirl» print(h1.isspace()) print(h2.isspace()) print(h3.isspace()) print(h4.isspace()) |
Вывод:
python3 app.py True False True False |
- Пример 2: напишите программу, которая проверяет, содержат ли две строки только пробельные символы. Выведите «Yes», если верно, и «No», если ложно.
# app.py h1 = » « h2 = «t» if(h1.isspace() and h2.isspace()): print(«YES») else: print(«NO») |
Вывод:
- Пример 3: мы можем вычислить общее количество пробелов в строке.
# app.py string = ‘KGF movie starringnnnnnn Yash’ count = 0 for a in string: if(a.isspace()) == True: count += 1 print(count) |
Вывод:
7 ответов
def tt(w):
if ' ' in w:
print 'space'
else:
print 'no space'
>> tt('b ')
>> space
>> tt('b b')
>> space
>> tt('bb')
>> no space
Я нахожусь в поезде, жаль, что не объясняю.. не могу набрать много..
doniyor
18 нояб. 2014, в 06:51
Поделиться
Вы используете isspace
, в котором говорится
str.isspace()
Возвращает true, если в строке есть только пробельные символы, и есть хотя бы один символ, иначе false.
Для 8-битных строк этот метод зависит от локали.
Nilesh
18 нояб. 2014, в 07:16
Поделиться
Вот аккуратный метод, который иллюстрирует гибкость понимания списков. Это вспомогательный метод, который проверяет, содержит ли данная строка какие-либо пробелы.
код:
import string
def contains_whitespace(s):
return True in [c in s for c in string.whitespace]
Пример:
>>> contains_whitespace("BB")
False
>>> contains_whitespace("B B")
True
Это, конечно, можно расширить, чтобы проверить, содержит ли какая-либо строка элемент в любом наборе (а не просто пробел). Предыдущее решение — аккуратное, короткое решение, но некоторые могут утверждать, что его трудно читать и меньше Pythonic, чем что-то вроде:
def contains_whitespace(s):
for c in s:
if c in string.whitespace:
return True
return False
Duke
18 нояб. 2014, в 07:15
Поделиться
Поскольку вы ищете больше, чем просто ' '
, где вы можете использовать ' ' in tgt
, вы можете использовать any:
for s in ('B ', 'B B', 'BnB', 'BB'):
print repr(s), any(c.isspace() for c in s)
Печать
'B ' True
'B B' True
'BnB' True
'BB' False
dawg
18 нояб. 2014, в 07:38
Поделиться
user = 'B B'
for x in user:
if x.isspace():
print("no")
else:print("yes")
вам нужно зациклиться на нем, чтобы проверить все элементы, но приведенный выше код не будет работать так, как вы ожидаете.
используйте вспомогательную функцию:
def space(text):
if ' ' in text:
return True
else: return False
демо:
>>> ' ' in 'B B'
True
>>> ' ' in 'BB'
False
используйте in
для проверки
если вы хотите использовать isspace
:
def space(text):
for x in text:
if x.isspace():
return True
return False
Вместо того, чтобы возвращать True или False, вы также можете вернуть желаемую строку:
>>> def space(text):
... if ' ' in text:
... return " yes Spaces"
... else: return " No Spaces"
...
>>> space('B B')
' yes Spaces'
>>> space('BB')
' No Spaces'
Hackaholic
18 нояб. 2014, в 06:42
Поделиться
Вы можете использовать str.split
, чтобы проверить, содержит ли строка пробелы:
>>> ''.split()
[]
>>> ' '.split()
[]
>>> 'BB'.split()
['BB']
>>> ' B '.split()
['B']
>>> 'B B'.split()
['B', 'B']
Итак, вы можете проверить как
def hasspace(x):
if x:
s = x.split()
return len(s) == 1 and x == s[0]
return False
Если вы пытаетесь проверить только целые слова в строке (т.е. вас не беспокоят окружающие пространства, которые можно удалить с помощью x.strip()
), условие x == s[0]
больше не требуется. Проверка становится единственным выражением:
def hasspace(x):
return x and len(x.split()) == 1
Теперь вы можете сделать
if hasspace(user):
print("NO!!!")
else:
print("YES!!!")
Mad Physicist
09 март 2018, в 20:51
Поделиться
In [1]: a<br>
Out[1]: ' btn'
In [2]: (' ' in a)or('t' in a)or('n' in a)<br>
Out[2]: True
Vietnhi Phuvan
18 нояб. 2014, в 18:30
Поделиться
Ещё вопросы
- 0MySQL Выберите поле как Distinct с типом данных как Text с фильтрацией
- 0получить выбранный переключатель из группы
- 0Как я могу перенаправить с нового URL на предыдущий URL в веб-просмотре, используя angularjs?
- 0Java — Spring Boot — Mysql / Java — Получить тип транспортного средства из столбца таблицы и получить их общее количество (КОЛИЧЕСТВО) из другой таблицы
- 1setState не работает с кнопкой DropDown в Flutter
- 1Как сопоставить шаблон регулярного выражения только в одной строке?
- 0Относительно предварительного объявления класса C ++
- 0C ++ ошибка Valgrind
- 0Сделать элемент div растянутым на всю высоту страницы
- 0Функция C ++, возвращающая строку с запятой
- 0Все функции не работают в кнопке возобновления
- 1HashMap с определенным временем поиска?
- 0Подсчет вхождений различных значений при возврате различных значений
- 1Функция хеширования Java MD5, дающая неправильный хеш
- 1Javascript ES6 Получить JSON из URL (без jQuery)
- 0Недостаточно аргументов в строке, несколько предложений IN со значениями списка в запросе MySQL из Python
- 1Лямбда-ошибка Python 3: Истинное значение Серии неоднозначно
- 0jQuery load () застревает / зависает
- 1Способ извлечь формат datetime.now из строки?
- 0Как я могу связать число с определенной строкой и использовать эту строку для фильтрации итерации в AngularJS?
- 1Как взять целые из Action Event в массив, чтобы создать круг в Java?
- 1Проблемы с настройкой GUI
- 0для каждого счетчика цикл в C ++ не увеличивается с определенными числами
- 1Наследование Java — моделирование нескольких объектов
- 1Flask sqlAlchemy: создание моделей для существующей структуры базы данных
- 1значение строки запроса не извлекается
- 0комплектация не работает
- 0Оставить MySQL запрос в той же таблице
- 0Размер массива ограничен в PHP scandir ()
- 1Установка яркости фильтра родителя без влияния на дочерний элемент
- 0Относительный путь 2 уровня вверх в JavaScript
- 0Угловой сервис возвращает пустой объект
- 0Значение переменной $ scope не обновляется в контроллере Angular JS?
- 1Не удается найти элемент с помощью селектора CSS с Selenium на Python
- 0Пользовательская тема Tumblr исчезает при выходе
- 1Эффективный для памяти способ хранения значений bool и NaN в пандах
- 0AngularJS: Как мне прокрутить объект со смещением?
- 0Событие внешнего клика для приостановки запроса аудиоплеера
- 1Ionic 2 Angular 2 — не удается получить доступ к NavController из метода
- 0Доступ к функции-члену из вектора указателей? C ++
- 1Включить CSS в Struts2 JSP странице
- 1Закрепление WinForm внутри другого WinForm
- 0href связанный swfobject (без поддержки clicktag)
- 0Создать экземпляр класса на основе строкового ввода
- 0Получение данных при печати URL в html-странице
- 1Динамическое связывание массивов
- 0Код OpenGL Работает в Windows, но не в Mac
- 0Как получить значение из запроса MySQL вне оператора запроса?
- 0Вырезать URL-адрес изображения API Facebook
- 0Как предотвратить открытие редактора сетки кендо, всплывающих в JavaScript
Часто нам нужно найти символ в строке python. Для решения этой задачи разработчики используют метод find()
. Он помогает найти индекс первого совпадения подстроки в строке. Если символ или подстрока не найдены, find возвращает -1.
Синтаксис
string.find(substring,start,end)
Метод find
принимает три параметра:
substring
(символ/подстрока) — подстрока, которую нужно найти в данной строке.start
(необязательный) — первый индекс, с которого нужно начинать поиск. По умолчанию значение равно 0.end
(необязательный) — индекс, на котором нужно закончить поиск. По умолчанию равно длине строки.
Параметры, которые передаются в метод, — это подстрока, которую требуются найти, индекс начала и конца поиска. Значение по умолчанию для начала поиска — 0, а для конца — длина строки.
В этом примере используем метод со значениями по умолчанию.
Метод find()
будет искать символ и вернет положение первого совпадения. Даже если символ встречается несколько раз, то метод вернет только положение первого совпадения.
>>> string = "Добро пожаловать!"
>>> print("Индекс первой буквы 'о':", string.find("о"))
Индекс первой буквы 'о': 1
Поиск не с начала строки с аргументом start
Можно искать подстроку, указав также начальное положение поиска.
В этом примере обозначим стартовое положение значением 8 и метод начнет искать с символа с индексом 8. Последним положением будет длина строки — таким образом метод выполнит поиска с индекса 8 до окончания строки.
>>> string = "Специалисты назвали плюсы и минусы Python"
>>> print("Индекс подстроки 'али' без учета первых 8 символов:", string.find("али", 8))
Индекс подстроки 'али' без учета первых 8 символов: 16
Поиск символа в подстроке со start и end
С помощью обоих аргументов (start
и end
) можно ограничить поиск и не проводить его по всей строке. Найдем индексы слова «пожаловать» и повторим поиск по букве «о».
>>> string = "Добро пожаловать!"
>>> start = string.find("п")
>>> end = string.find("ь") + 1
>>> print("Индекс первой буквы 'о' в подстроке:", string.find("о", start, end))
Индекс первой буквы 'о' в подстроке: 7
Проверка есть ли символ в строке
Мы знаем, что метод find()
позволяет найти индекс первого совпадения подстроки. Он возвращает -1
в том случае, если подстрока не была найдена.
>>> string = "Добро пожаловать!"
>>> print("Есть буква 'г'?", string.find("г") != -1)
Есть буква 'г'? False
>>> print("Есть буква 'т'?", string.find("т") != -1)
Есть буква 'т'? True
Поиск последнего вхождения символа в строку
Функция rfind()
напоминает find()
, а единое отличие в том, что она возвращает максимальный индекс. В обоих случаях же вернется -1
, если подстрока не была найдена.
В следующем примере есть строка «Добро пожаловать!». Попробуем найти в ней символ «о» с помощью методов find()
и rfind()
.
>>> string = "Добро пожаловать"
>>> print("Поиск 'о' методом find:", string.find("о"))
Поиск 'о' методом find: 1
>>> print("Поиск 'о' методом rfind:", string.rfind("о"))
Поиск 'о' методом rfind: 11
Вывод показывает, что find()
возвращает индекс первого совпадения подстроки, а rfind()
— последнего совпадения.
Второй способ поиска — index()
Метод index()
помогает найти положение данной подстроки по аналогии с find()
. Единственное отличие в том, что index()
бросит исключение в том случае, если подстрока не будет найдена, а find()
просто вернет -1
.
Вот рабочий пример, показывающий разницу в поведении index()
и find()
:
>>> string = "Добро пожаловать"
>>> print("Поиск 'о' методом find:", string.find("о"))
Поиск 'о' методом find: 1
>>> print("Поиск 'о' методом index:", string.index("о"))
Поиск 'о' методом index: 1
В обоих случаях возвращается одна и та же позиция. А теперь попробуем с подстрокой, которой нет в строке:
>>> string = "Добро пожаловать"
>>> print("Поиск 'г' методом find:", string.find("г"))
Поиск 'г' методом find: 1
>>> print("Поиск 'г' методом index:", string.index("г"))
Traceback (most recent call last):
File "pyshell#21", line 1, in module
print("Поиск 'г' методом index:", string.index("г"))
ValueError: substring not found
В этом примере мы пытались найти подстроку «г». Ее там нет, поэтому find()
возвращает -1, а index()
бросает исключение.
Поиск всех вхождений символа в строку
Чтобы найти общее количество совпадений подстроки в строке можно использовать ту же функцию find()
. Пройдемся циклом while по строке и будем задействовать параметр start
из метода find()
.
Изначально переменная start
будет равна -1, что бы прибавлять 1 у каждому новому поиску и начать с 0. Внутри цикла проверяем, присутствует ли подстрока в строке с помощью метода find.
Если вернувшееся значение не равно -1, то обновляем значением count.
Вот рабочий пример:
my_string = "Добро пожаловать"
start = -1
count = 0
while True:
start = my_string.find("о", start+1)
if start == -1:
break
count += 1
print("Количество вхождений символа в строку: ", count )
Количество вхождений символа в строку: 4
Выводы
- Метод
find()
помогает найти индекс первого совпадения подстроки в данной строке. Возвращает -1, если подстрока не была найдена. - В метод передаются три параметра: подстрока, которую нужно найти,
start
со значением по умолчанию равным 0 иend
со значением по умолчанию равным длине строки. - Можно искать подстроку в данной строке, задав начальное положение, с которого следует начинать поиск.
- С помощью параметров
start
иend
можно ограничить зону поиска, чтобы не выполнять его по всей строке. - Функция
rfind()
повторяет возможностиfind()
, но возвращает максимальный индекс (то есть, место последнего совпадения). В обоих случаях возвращается -1, если подстрока не была найдена. index()
— еще одна функция, которая возвращает положение подстроки. Отличие лишь в том, чтоindex()
бросает исключение, если подстрока не была найдена, аfind()
возвращает -1.find()
можно использовать в том числе и для поиска общего числа совпадений подстроки.