Большинство вопросов, которые я нашел, смещены на тот факт, что они ищут буквы в своих числах, в то время как я ищу цифры в том, что я хотел бы быть бесчисленной строкой. Мне нужно ввести строку и проверить, содержит ли она какие-либо числа и отклоняет ли она.
Функция isdigit()
возвращается, только True
если ВСЕ символы являются числами. Я просто хочу увидеть, если пользователь ввел число, так что предложение вроде "I own 1 dog"
или что-то.
Любые идеи?
r'-?\d+'
\d
будет соответствовать только одна цифра в диапазоне0
до9
.Вы можете использовать комбинацию
any
иstr.isdigit
:Функция вернется,
True
если в строке есть цифра, в противном случаеFalse
.Демо-версия:
источник
any
принимает выражения генератора.использование
Ссылка: https://docs.python.org/2/library/stdtypes.html#str.isalpha
источник
'_'.isalpha()
False.https://docs.python.org/2/library/re.html
Вы должны лучше использовать регулярное выражение. Это намного быстрее.
источник
None
Вы можете применить функцию isdigit () к каждому символу в строке. Или вы можете использовать регулярные выражения.
Также я нашел Как найти одно число в строке в Python? с очень подходящими способами вернуть числа. Решение ниже от ответа на этот вопрос.
В качестве альтернативы:
Для получения дополнительной информации ознакомьтесь с документом regex: http://docs.python.org/2/library/re.html.
Изменить: Возвращает действительные числа, а не логическое значение, поэтому приведенные выше ответы более верны для вашего случая.
Первый метод возвращает первую цифру и последующие последовательные цифры. Таким образом, 1.56 будет возвращено как 1. 10000 будет возвращено как 10. 0207-100-1000 будет возвращено как 0207.
Второй метод не работает.
Чтобы извлечь все цифры, точки и запятые и не потерять непоследовательные цифры, используйте:
источник
Вы можете использовать метод NLTK для этого.
Это найдет «1» и «один» в тексте:
источник
Вы можете сделать это следующим образом:
if a_string.isdigit(): do_this() else: do_that()
https://docs.python.org/2/library/stdtypes.html#str.isdigit
Использование
.isdigit()
также означает, что вам не нужно прибегать к обработке исключений (попытаться / исключить ) в тех случаях, когда вам необходимо использовать понимание списка (попытаться / исключить невозможно в понимании списка).источник
Вы можете использовать диапазон с количеством, чтобы проверить, сколько раз число появляется в строке, сравнивая его с диапазоном:
источник
Я удивлен, что никто не упомянул эту комбинацию
any
иmap
:в Python 3 он, вероятно, самый быстрый (за исключением, может быть, регулярных выражений), потому что он не содержит никакого цикла (а псевдоним функции избегает его поиска
str
).Не используйте это в Python 2, как
map
возвращает alist
, что устраняетany
короткое замыканиеисточник
Что насчет этого?
источник
Я сделаю ответ @zyxue немного более явным:
это решение с самым быстрым тестом из решений, предложенных @zyxue в ответе.
источник
Более простой способ решить как
источник
Этот код генерирует последовательность размером n, которая содержит как минимум прописные буквы, строчные буквы и цифры. Используя цикл while, мы гарантировали это событие.
источник
any
иord
могут быть объединены для достижения цели, как показано ниже.Пара моментов об этой реализации.
any
лучше, потому что он работает как выражение короткого замыкания в языке Си и вернет результат, как только он может быть определен, т. е. в случае строки 'a1bbbbbbc' 'b и' c даже не будут сравниваться.ord
это лучше, потому что он обеспечивает большую гибкость, как проверочные числа только между «0» и «5» или любой другой диапазон. Например, если вы хотите написать валидатор для шестнадцатеричного представления чисел, вы бы хотели, чтобы строка имела алфавиты только в диапазоне от «A» до «F».источник
Это возвращает всю строку, в которой есть как алфавиты, так и цифры. isalpha () возвращает строку со всеми цифрами или всеми символами.
источник
Это, вероятно, не лучший подход в Python, но, как Haskeller, этот подход лямбда / карта имел для меня смысл и очень короткий:
anydigit = lambda x: any(map(str.isdigit, x))
Не нужно называть, конечно. Названный это мог использоваться как
anydigit("abc123")
, который чувствует себя подобно тому, что я искал!источник