2 простые способы извлечения цифр из строки Python
Здравствуйте, читатели! В этой статье мы будем сосредоточиться на способах извлечения цифр из строки Python. Итак, давайте начнем.
- Автор записи
2 простые способы извлечения цифр из строки Python
Здравствуйте, читатели! В этой статье мы будем сосредоточиться на способы извлечения цифр из строки Python Отказ Итак, давайте начнем.
1. Использование функции ISDIGIT () для извлечения цифр из строки Python
Python предоставляет нам string.isdigit () Чтобы проверить наличие цифр в строке.
Python Isdigit () Функция возвращает Правда Если входная строка содержит цифровые символы в нем.
Синтаксис :
Нам не нужно проходить ни один параметр к нему. В качестве вывода он возвращает true или false в зависимости от наличия цифр символов в строке.
В этом примере мы имеем итерацию входной строки символа по символу с использованием A для LOOP. Как только функция ISDIGIT () сталкивается с цифрой, она будет хранить его в строковую переменную с именем «NUM».
Таким образом, мы видим вывод, как показано ниже
Теперь мы можем даже использовать понимание списка Python для клуба итерации и iDigit () в одну строку.
При этом цифры символов хранятся в списке «Num», как показано ниже:
2. Использование библиотеки Regex для извлечения цифр
Библиотека регулярных выражений Python называется « » Библиотека Regex «Позволяет нам обнаружить наличие конкретных символов, таких как цифры, некоторые специальные символы и т. Д. Из строки.
Нам нужно импортировать библиотеку Regex в среду Python, прежде чем выполнять любые дальнейшие шаги.
Далее мы мы Re.findall (R ‘\ D +’, String) Чтобы извлечь цифры символов из строки. Часть ‘\ D +’ поможет функцию findall () для обнаружения наличия любой цифры.
Итак, как видно ниже, мы получим список всех цифр из строки.
Заключение
По этому, мы подошли к концу этой темы. Не стесняйтесь комментировать ниже, если вы столкнетесь с любым вопросом.
Я рекомендую всем вам попробовать реализацию приведенных выше примеров с использованием структур данных, таких как списки, Dict и т. Д.
Для большего количества таких постов, связанных с Python, оставаться настроенными, а до тех пор, как потом, счастливое обучение !! .
Извлечь число из строки в Python
Я новичок в Python , и у меня есть строка, я хочу извлечь числа из строки. Например:
Я хочу получить только 3158 , желательно как целое число, а не как список.
Ответы (16)
Вы можете filter строку, состоящую из цифр, используя метод str.isdigit ,
Этот код работает нормально. Определенно есть другая проблема:
Ваше регулярное выражение выглядит правильно. Вы уверены, что не ошиблись с именами переменных? В приведенном выше коде вы смешиваете total_hotel_reviews_string и str .
Чтобы извлечь одно число из строки, вы можете использовать re.search() , который возвращает первое совпадение (или None ):
В Python 3.6+ вы также можете index в сопоставить объект вместо использования group() :
Если формат такой простой (число отделяется от остальных пробелом), то
Лучше всего подходит для всех сложных типов
Вы были довольно близки к окончательному ответу. В вашем выражении re.finadall отсутствовала только закрывающая скобка, чтобы уловить все обнаруженные числа:
Для более общей строки, такой как str1 = "3158 reviews, 432 users" , этот код даст:
Теперь, чтобы получить целые числа, вы можете map функцию int для преобразования строк в целые числа:
В качестве альтернативы вы можете использовать этот однострочный цикл:
A = [int (x) вместо x в re.findall (‘(\ d +)’, str1)]
Оба метода одинаково верны. Они дают A = [3158, 432] .
Ваш последний result для исходного вопроса будет первой записью в массиве A , поэтому мы приходим к любому из этих выражений:
результат = список (карта (int, re.findall (‘(\ d +)’, str1))) [0]
Даже если в str1 присутствует только одно число, re.findall все равно вернет список, поэтому вам нужно получить первый элемент A[0] вручную.
Может быть небольшая проблема с кодом из ответа Вишну. Если в строке нет цифр, она вернет ValueError. Вот мое предложение избежать этого:
Вышеупомянутые решения, похоже, предполагают целые числа. Вот небольшая модификация, позволяющая использовать десятичные дроби:
(Не учитывает знак — и предполагает, что в строке цифр правильно помещена любая точка, а не просто какая-то англоязычная точка. Она не построена так, чтобы быть неразрушимой, но сработала для моего случая данных.)
Я новичок в программировании. Это моя попытка ответить на вопросы. Использовал версию Python3.7 без импорта каких-либо библиотек.
Этот код извлекает и возвращает десятичное число из строки, состоящей из наборов символов, разделенных пробелами (словами).
Внимание: если число несколько, возвращается последнее значение.
Мой ответ не требует дополнительных библиотек, и его легко понять. Но вы должны заметить, что если в строке больше одного числа, мой код объединит их вместе.
# Используйте это, ЭТО ДЛЯ ИЗВЛЕЧЕНИЯ НОМЕРА ИЗ СТРОКИ В целом. # Чтобы получить все числовые вхождения.
* функция разделения для преобразования строки в список, а затем понимание списка, которое может помочь нам перебирать список, а функция цифр помогает получить цифру из строки.
получение числа из строки
использовать понимание списка + isdigit ()
# Для извлечения числовых значений из строки в python
* Найдите список всех целых чисел в строке, разделенных строчными буквами, используя метод re.findall(expression,string) .
* Преобразуйте каждое число в виде строки в десятичное число, а затем найдите его максимальное значение.
Блог питониста
Недавно была одна задача, в принципе, элементарная, но, видимо, не нaстолько простая, как показалось мне на первый взгляд.
Представьте, что у вас есть строка вида "+7 (123) 4567890" , вам нужно взять из нее только цифры. "Что может быть проще?", — подумал я и, конечно, не сделал так:
Кроме того, я решил не использовать регулярки, потому что, как говорится, "Если у тебя есть проблема и ты ее решил регуляркой, то у тебя две проблемы". Я сделал так:
Это, конечно, лол, но мне тогда показалось это хорошим решением. Но что, если по какой-то причине вариантов нецифровых символов будет больше, что, переписывать код? Не говоря уже о том, что это можно сделать короче и красивее. Увидев этот код, коллега попросил меня его срочно переписать, и он был прав. Сначала стоит вспомнить, что у строки есть метод isdigit :
Ну или, к примеру, так, если вы любите лямбды:
Кроме того, мое предубеждение по поводу регулярок оказалось чрезмерным. Если рассудить здраво, то их можно и нужно использовать в подходящих ситуациях, просто делать это надо с умом. Как вам, например такой вариант?
Этот случай меня научил тому, что никогда не нужно переставать сомневаться в себе и в своем коде. Кто-то говорит, что нужно быть уверенным в себе. Но как тогда быть с вероятностью напороть косяков?
Я не буду строить из себя психолога, мои рассуждения об этом могут показаться бредом, и я правда в этом не разбираюсь, но, мне кажется, здесь есть определенное противоречие: с одной стороны нужно быть уверенным в себе, а следовательно и в своей работе, но с другой стороны нужно критически относиться к себе. Вот, что пишет один человек:
У каждого есть внутренний голос, который время от времени говорит: «лол, ты ничтожество». И без этого внутреннего голоса мы бы не лезли по книгам, не пересматривали по три раза написанное или не убивали бы 20-30 часов в месяц на переписывание «с нуля» уже имеющегося кода\текста\макета (берите любую созидательную профессию). Не знаю, может у женщин психика как-то устроена иначе, но мужской коллектив, состоящий из профессионалов — это Колизей насилия и взаимного угнетения знанием, в котором постоянно льется чья-то интеллектуальная кровь. При этом параллельно эти люди протягивают друг другу «бинты» и прочие «медикаменты» в виде информации и советов. А вот вопрос взаимопомощи и социального контакта — совершенно иная плоскость. При наличии наставника, который покажет на ошибки и научит их исправлять, любой с «синдромом самозванца» будет расти и крепнуть как специалист.
Короче, я к тому, что методы оправдывают цели, в большинстве случаев. И конкретно в моем случае, если бы не постоянный гнет моего внутреннего «самозванца» вкупе с парой-тройкой «церберов», которые тыкали мне на мои ошибки, ничему бы я так толком и не научился. Тепло, ласка, поддержка и кружечка какао — расслабляют, дают ложное чувство «ай, и так сойдет». С другой стороны — никто не может критиковать тебя сильнее, чем ты сам. Если твою работу жестче оценивает кто-то из вне (а не ты сам), при этом тебе кажется эта критика необьективной (при минимум одинаковом уровне компетенции), то, товарищ, у тебя проблемы с самооценкой, что фатально.
Поэтому я не вижу серьезной проблемы в «синдроме самозванца» — это очередной адаптивный механизм психики, без которого этот мир бы не существовал.
How to extract numbers from a string in Python?
I would like to extract all the numbers contained in a string. Which is better suited for the purpose, regular expressions or the isdigit() method?
19 Answers 19
I’d use a regexp :
This would also match 42 from bla42bla . If you only want numbers delimited by word boundaries (space, period, comma), you can use \b :
To end up with a list of numbers instead of a list of strings:
NOTE: this does not work for negative integers
If you only want to extract only positive integers, try the following:
I would argue that this is better than the regex example because you don’t need another module and it’s more readable because you don’t need to parse (and learn) the regex mini-language.
This will not recognize floats, negative integers, or integers in hexadecimal format. If you can’t accept these limitations, jmnas’s answer below will do the trick.
This is more than a bit late, but you can extend the regex expression to account for scientific notation too.
Additionally, you can look at the AWS Glue built-in regex
If you know it will be only one number in the string, i.e ‘hello 12 hi’ , you can try filter .
But be carefull . :
![]()
I’m assuming you want floats not just integers so I’d do something like this:
Note that some of the other solutions posted here don’t work with negative numbers:
To catch different patterns it is helpful to query with different patterns.
Setup all the patterns that catch different number patterns of interest:
- To find commas, e.g. 12,300 or 12,300.00
- To find floats, e.g. 0.123 or .123
- To find integers, e.g. 123
Combine with pipe ( | ) into one pattern with multiple or conditionals.
(Note: Put complex patterns first else simple patterns will return chunks of the complex catch instead of the complex catch returning the full catch).
Below, we’ll confirm a pattern is present with re.search() , then return an iterable list of catches. Finally, we’ll print each catch using bracket notation to subselect the match object return value from the match object.
![]()
I was looking for a solution to remove strings’ masks, specifically from Brazilian phones numbers, this post not answered but inspired me. This is my solution:
![]()
For phone numbers you can simply exclude all non-digit characters with \D in regex:
The r in r"\D" stands for raw string. It is necessary. Without it, Python will consider \D as an escape character.
![]()
Using Regex below is the way
with findall re.findall(r’\d+’, "hello 12 hi 89")
re.findall(r’\b\d+\b’, "hello 12 hi 89 33F AC 777")
![]()
you can search all the integers in the string through digit by using findall expression.
In the second step create a list res2 and add the digits found in string to this list.
![]()
![]()
I am just adding this answer because no one added one using Exception handling and because this also works for floats
This answer also contains the case when the number is float in the string
![]()
I am amazed to see that no one has yet mentioned the usage of itertools.groupby as an alternative to achieve this.
You may use itertools.groupby() along with str.isdigit() in order to extract numbers from string as:
The value hold by l will be:
PS: This is just for illustration purpose to show that as an alternative we could also use groupby to achieve this. But this is not a recommended solution. If you want to achieve this, you should be using accepted answer of fmark based on using list comprehension with str.isdigit as filter.
![]()
The cleanest way i found:
@jmnas, I liked your answer, but it didn’t find floats. I’m working on a script to parse code going to a CNC mill and needed to find both X and Y dimensions that can be integers or floats, so I adapted your code to the following. This finds int, float with positive and negative vals. Still doesn’t find hex formatted values but you could add «x» and «A» through «F» to the num_char tuple and I think it would parse things like ‘0x23AC’.
Since none of these dealt with real world financial numbers in excel and word docs that I needed to find, here is my variation. It handles ints, floats, negative numbers, currency numbers (because it doesn’t reply on split), and has the option to drop the decimal part and just return ints, or return everything.
It also handles Indian Laks number system where commas appear irregularly, not every 3 numbers apart.
It does not handle scientific notation or negative numbers put inside parentheses in budgets — will appear positive.
It also does not extract dates. There are better ways for finding dates in strings.