This is more than a bit late, but you can extend the regex expression to account for scientific notation too.
import re
# Format is [(<string>, <expected output>), ...]
ss = [("apple-12.34 ba33na fanc-14.23e-2yapple+45e5+67.56E+3",
['-12.34', '33', '-14.23e-2', '+45e5', '+67.56E+3']),
('hello X42 I'm a Y-32.35 string Z30',
['42', '-32.35', '30']),
('he33llo 42 I'm a 32 string -30',
['33', '42', '32', '-30']),
('h3110 23 cat 444.4 rabbit 11 2 dog',
['3110', '23', '444.4', '11', '2']),
('hello 12 hi 89',
['12', '89']),
('4',
['4']),
('I like 74,600 commas not,500',
['74,600', '500']),
('I like bad math 1+2=.001',
['1', '+2', '.001'])]
for s, r in ss:
rr = re.findall("[-+]?[.]?[d]+(?:,ddd)*[.]?d*(?:[eE][-+]?d+)?", s)
if rr == r:
print('GOOD')
else:
print('WRONG', rr, 'should be', r)
Gives all good!
Additionally, you can look at the AWS Glue built-in regex
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Given a string str containing numbers and alphabets, the task is to find all the numbers in str using regular expression.
Examples:
Input: abcd11gdf15hnnn678hh4
Output: 11 15 678 4Input: 1abcd133hhe0
Output: 1 133 0
Recommended: Please try your approach on {IDE} first, before moving on to the solution.
Approach: The idea is to use Python re library to extract the sub-strings from the given string which match the pattern [0-9]+. This pattern will extract all the characters which match from 0 to 9 and the + sign indicates one or more occurrence of the continuous characters.
Below is the implementation of the above approach:
Python3
import
re
def
getNumbers(
str
):
array
=
re.findall(r
'[0-9]+'
,
str
)
return
array
str
=
"adbv345hj43hvb42"
array
=
getNumbers(
str
)
print
(
*
array)
Time Complexity : O(n), where n is length of str string.
Auxiliary Space : O(n), where n is length of array.
Last Updated :
08 May, 2023
Like Article
Save Article
Извлечь из строки числа
Дана строка, содержащая натуральные числа и слова. Необходимо сформировать список из чисел, содержащихся в этой строке. Например, задана строка “abc83 cde7 1 b 24”. На выходе мы должны получить список [83, 7, 1, 24].
Решение задачи на языке программирования Python
Следует посимвольно перебирать строку. Если очередной символ цифра, надо добавить ее в новую строку. Далее проверять символы за ней, и если они тоже цифры, то добавлять их в конец этой новой подстроки из цифр. Когда очередной символ окажется не цифрой, или будет достигнут конец строки, то надо преобразовать строку из цифр в число и добавить в список.
s = input() length = len(s) integers = [] i = 0 # индекс текущего символа while i < length: s_int = '' # строка для нового числа while i < length and '0' <= s[i] <= '9': s_int += s[i] i += 1 i += 1 if s_int != '': integers.append(int(s_int)) print(integers)
5 dkfj78df 9 8 dkfj8 [5, 78, 9, 8, 8]
Обратите внимание, что данное решение извлекает именно числа, а не цифры. Иначе мы бы не получили число 78, а получили отдельно цифру 7 и цифру 8. Задача на извлечение цифр существенно проще.
Решение через цикл for:
a = input() num_list = [] num = '' for char in a: if char.isdigit(): num = num + char else: if num != '': num_list.append(int(num)) num = '' if num != '': num_list.append(int(num)) print(num_list)
Если в строке числа всегда отделены от слов пробелами, задача решается проще:
s = input() word_list = s.split() num_list = [] for word in word_list: if word.isnumeric(): num_list.append(int(word)) print(num_list)
Здесь происходит разделение строки на слова по пробелам. В цикле с помощью метода isnumeric
каждое слово проверяется, является ли оно числом. Подобную задачу можно решить в одну строку, если использовать функцию filter
.
s = input() word_list = s.split() num_list = [int(num) for num in filter( lambda num: num.isnumeric(), word_list)] print(num_list)
В функцию filter
передается лямбда-выражение, проверяющее слова, и список слов. Функция возвращает список строк-чисел. Далее с помощью генератора списка строки преобразовываются в целочисленный тип.
На практике при решении подобных задач, когда надо найти и извлечь из строки что-либо, обычно пользуются регулярными выражениями. В примере ниже не обязательно, чтобы число было отделено пробелами.
import re s = input() nums = re.findall(r'd+', s) nums = [int(i) for i in nums] print(nums)
Для поиска вещественных чисел:
import re s = input() nums = re.findall(r'd*.d+|d+', s) nums = [float(i) for i in nums] print(nums)
Больше задач в PDF
Автор оригинала: Pankaj Kumar.
Здравствуйте, читатели! В этой статье мы будем сосредоточиться на способы извлечения цифр из строки Python Отказ Итак, давайте начнем.
1. Использование функции ISDIGIT () для извлечения цифр из строки Python
Python предоставляет нам string.isdigit ()
Чтобы проверить наличие цифр в строке.
Python Isdigit () Функция возвращает Правда Если входная строка содержит цифровые символы в нем.
Синтаксис :
Нам не нужно проходить ни один параметр к нему. В качестве вывода он возвращает true или false в зависимости от наличия цифр символов в строке.
Пример 1:
inp_str = "Python4Journaldev" print("Original String : " + inp_str) num = "" for c in inp_str: if c.isdigit(): num = num + c print("Extracted numbers from the list : " + num)
В этом примере мы имеем итерацию входной строки символа по символу с использованием A для LOOP. Как только функция ISDIGIT () сталкивается с цифрой, она будет хранить его в строковую переменную с именем «NUM».
Таким образом, мы видим вывод, как показано ниже
Выход:
Original String : Python4Journaldev Extracted numbers from the list : 4
Теперь мы можем даже использовать понимание списка Python для клуба итерации и iDigit () в одну строку.
При этом цифры символов хранятся в списке «Num», как показано ниже:
Пример 2:
inp_str = "Hey readers, we all are here be 4 the time!" print("Original string : " + inp_str) num = [int(x) for x in inp_str.split() if x.isdigit()] print("The numbers list is : " + str(num))
Выход:
Original string : Hey readers, we all are here be 4 the time! The numbers list is : [4]
2. Использование библиотеки Regex для извлечения цифр
Библиотека регулярных выражений Python называется « » Библиотека Regex «Позволяет нам обнаружить наличие конкретных символов, таких как цифры, некоторые специальные символы и т. Д. Из строки.
Нам нужно импортировать библиотеку Regex в среду Python, прежде чем выполнять любые дальнейшие шаги.
Далее мы мы Re.findall (R ' D +', String)
Чтобы извлечь цифры символов из строки. Часть ‘ D +’ поможет функцию findall () для обнаружения наличия любой цифры.
Пример:
import re inp_str = "Hey readers, we all are here be 4 the time 1!" print("Original string : " + inp_str) num = re.findall(r'd+', inp_str) print(num)
Итак, как видно ниже, мы получим список всех цифр из строки.
Выход:
Original string : Hey readers, we all are here be 4 the time 1! ['4', '1']
Заключение
По этому, мы подошли к концу этой темы. Не стесняйтесь комментировать ниже, если вы столкнетесь с любым вопросом.
Я рекомендую всем вам попробовать реализацию приведенных выше примеров с использованием структур данных, таких как списки, Dict и т. Д.
Для большего количества таких постов, связанных с Python, оставаться настроенными, а до тех пор, как потом, счастливое обучение !! 🙂.
Anna Muller 0 / 0 / 0 Регистрация: 20.03.2018 Сообщений: 54 |
||||
1 |
||||
Найти в строке все цифры и вывести их10.04.2018, 15:57. Показов 41268. Ответов 19 Метки нет (Все метки)
Сама задача код
0 |
1289 / 906 / 479 Регистрация: 05.12.2013 Сообщений: 3,068 |
|
10.04.2018, 16:00 |
2 |
Проще чем в одну строку?
0 |
Рыжий Лис Просто Лис 5089 / 3256 / 1008 Регистрация: 17.05.2012 Сообщений: 9,537 Записей в блоге: 9 |
||||
10.04.2018, 16:13 |
3 |
|||
Сообщение было отмечено Anna Muller как решение РешениеМожет быть человек не понимает, как работают генераторы. Держи ради разнообразия регулярку:
1 |
Wi0M 394 / 122 / 48 Регистрация: 26.10.2013 Сообщений: 734 |
||||||||
10.04.2018, 16:32 |
4 |
|||||||
Добавлено через 2 минуты
1 |
woldemas 654 / 458 / 212 Регистрация: 06.09.2013 Сообщений: 1,266 |
||||
10.04.2018, 16:36 |
5 |
|||
0 |
vic5710 856 / 639 / 248 Регистрация: 10.12.2016 Сообщений: 1,557 |
||||
10.04.2018, 16:37 |
6 |
|||
print(”.join(s for s in str if s.isdigit()))
str служебное слово питона, не надо перекрывать
0 |
394 / 122 / 48 Регистрация: 26.10.2013 Сообщений: 734 |
|
10.04.2018, 16:42 |
7 |
вы че реально не видите что ваши строчки с join вам выплюнут SyntaxError ?))) дважды написали два разных человека) а ошибка одна и таже))) Добавлено через 26 секунд
0 |
1289 / 906 / 479 Регистрация: 05.12.2013 Сообщений: 3,068 |
|
10.04.2018, 16:48 |
8 |
В варианте с filter не выплюнет
0 |
654 / 458 / 212 Регистрация: 06.09.2013 Сообщений: 1,266 |
|
10.04.2018, 16:48 |
9 |
вы че реально не видите что ваши строчки с join вам выплюнут SyntaxError ?))) это какие?
0 |
1289 / 906 / 479 Регистрация: 05.12.2013 Сообщений: 3,068 |
|
10.04.2018, 16:49 |
10 |
print(”.join[i for i in s if i.isdigit()]) тут не хватает скобок у join
0 |
654 / 458 / 212 Регистрация: 06.09.2013 Сообщений: 1,266 |
|
10.04.2018, 16:50 |
11 |
тут не хватает скобок у join это да, но мой вариант с filter, там не может быть синтаксической ошибки
0 |
1289 / 906 / 479 Регистрация: 05.12.2013 Сообщений: 3,068 |
|
10.04.2018, 16:52 |
12 |
но мой вариант с filter, там не может быть синтаксической ошибки Об этом я написал выше
0 |
vic5710 856 / 639 / 248 Регистрация: 10.12.2016 Сообщений: 1,557 |
||||
10.04.2018, 16:54 |
13 |
|||
точно исправил
0 |
394 / 122 / 48 Регистрация: 26.10.2013 Сообщений: 734 |
|
10.04.2018, 18:37 |
14 |
woldemas, да в том то и дело что я не про фитр я про код ТС и vic5710 Добавлено через 34 секунды Не по теме: хотя, думаю, вы уже и так все поняли)
0 |
0 / 0 / 0 Регистрация: 25.12.2021 Сообщений: 1 |
|
25.12.2021, 18:09 |
15 |
Строго не судите, я начинающий прогер xD
0 |
285 / 166 / 89 Регистрация: 21.03.2016 Сообщений: 398 |
|
25.12.2021, 18:23 |
16 |
Строго не судите, я начинающий прогер xD Судить не будем, казним без суда и следствия. text = set(input()) – почему именно set Добавлено через 1 минуту
0 |
1509 / 479 / 56 Регистрация: 10.04.2009 Сообщений: 8,071 |
|
25.12.2021, 19:31 |
17 |
isalnum-это когда нужно достать только алфавитно-цифровые символы
0 |
4467 / 3147 / 1112 Регистрация: 21.03.2016 Сообщений: 7,837 |
|
25.12.2021, 20:07 |
18 |
Ципихович Эндрю, isalpha() не, не слышал???
1 |
1509 / 479 / 56 Регистрация: 10.04.2009 Сообщений: 8,071 |
|
25.12.2021, 20:38 |
19 |
Понял спасибо большое
0 |
Am I evil? Yes, I am! 15982 / 8994 / 2604 Регистрация: 21.10.2017 Сообщений: 20,694 |
|
25.12.2021, 23:02 |
20 |
isalpha() Что ж ты ему не рассказал и про isbeta(), isgamma(), islambda()… ?
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
25.12.2021, 23:02 |
Помогаю со студенческими работами здесь По заданной строке вывести все цифры, имеющиеся в ней Вывести все цифры, встречающиеся в символьной строке больше одного раза Вывести все цифры, встречающиеся в символьной строке больше одного раза Вывести все цифры, встречающиеся в символьной строке больше одного раза Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 20 |