Невозможно найти аналогию тому, каким образом Всемирная черепаха Великий A’Tyин движется на фоне галактической ночи. Когда ваша длина составляет десять тысяч миль, а панцирь изрыт метеоритными кратерами и покрыт льдом комет, единственное, на кого вы можете походить, – это на себя самого.
Напишите программу, которая определяет, что на что похоже.
Формат ввода
Вводятся строки, в которых числа записаны через произвольное количество пробелов.
Формат вывода
Из каждой строки выбрать числа, у которых в числе десятков стоит та же цифра, что и у последнего числа в строке, но которые не кратны первому числу в этой же строке.
Выводить через три точки в порядке ввода, первое и последнее числа в рассмотрении не участвуют.
Пример 1
Ввод Вывод
4 297 252 3555 152 51
3 297 298 911 599 220 295
28 378 109 211 171
78 47 2641 144 243
287 105
6 1305 256 300 2704 3
3555
298…599
378
47…2641…144
1305…2704
Пример 2
Ввод Вывод
24 50 79 231 223 20
163 57
16 266 164 64 167
Чтобы найти числа определенной длины, N – это строка, используйте регулярное выражение [0-9] + для поиска числовых строк любой длины. [0-9] соответствует одной цифре. После того, как вы найдете все элементы, отфильтруйте их по указанной длине.
Пример 1
В следующем примере мы берем строку и находим в ней все трехзначные числа.
import re str = 'We four guys, live at 2nd street of Malibeu 521. I had a cash of $248 in my pocket. I got a ticket with serial number 88796451-52.' #search using regex x = re.findall('[0-9]+', str) print('All Numbersn',x) #digits of length N N=3 def filterNumber(n): if(len(n)==N): return True else: return False #filter the list finalx = list(filter(filterNumber, x)) print('Final Listn',finalx)
Вывод:
All Numbers ['2', '521', '248', '88796451', '52'] Final List ['521', '248']
Ниже приводится объяснение наиболее заметных программных операторов в приведенном выше примере:
- re.findall (‘[0-9] +’, str) возвращает все слова, которые являются числами.
- Функция filterNumber(n) возвращает истину, если длина числа n равна указанной нами длине N.
- Отфильтруйте список, возвращенный на шаге 1, с помощью функции, определенной на шаге 2.
- Фильтр на шаге 3 возвращает список, содержащий числа указанной длины.
Мы узнали, как получить список чисел определенной длины, используя регулярное выражение в Python.
Как получить список всех чисел из строки?
Чтобы получить список всех чисел в строке, используйте регулярное выражение «[0-9] +» с методом re.findall(). [0-9] представляет собой регулярное выражение, соответствующее одной цифре в строке. [0-9] + представляет собой непрерывные последовательности цифр любой длины.
numbers = re.findall('[0-9]+', str)
Где, str – строка, в которой нам нужно найти числа. re.findall() возвращает список строк, соответствующих регулярному выражению.
Пример 1
В следующем примере мы возьмем строку. Мы живем по адресу 9–162, Малибеу. Мой номер телефона – 666688888. Я найду все числа [‘9’, ‘162’, ‘666688888’], присутствующие в строке.
import re str = 'We live at 9-162 Malibeu. My phone number is 666688888.' #search using regex x = re.findall('[0-9]+', str) print(x)
Вывод:
['9', '162', '666688888']
Пример 2: получение списка всех непрерывных цифр в строке
В следующем примере мы возьмем строку: Мы, четверо, живем на 2-й улице Малибеу. У меня в кармане было 248 долларов наличными. Я получил билет с серийным номером 88796451-52. И нахожу все числа [‘2’, ‘248’, ‘88796451’, ’52’], присутствующие в строке.
import re str = 'We four guys, live at 2nd street of Malibeu. I had a cash of $248 in my pocket. I got a ticket with serial number 88796451-52.' #search using regex x = re.findall('[0-9]+', str) print(x)
Вывод:
['2', '248', '88796451', '52']
Мы узнали, как получить все числа в виде строки в виде списка, используя регулярные выражения в Python, с помощью примеров программ.
Как получить список всех чисел из строки?
Чтобы получить список всех чисел в строке, используйте регулярное выражение «[0-9] +» с методом re.findall(). [0-9] представляет собой регулярное выражение, соответствующее одной цифре в строке. [0-9] + представляет собой непрерывные последовательности цифр любой длины.
numbers = re.findall('[0-9]+', str)
Где, str – строка, в которой нам нужно найти числа. re.findall() возвращает список строк, соответствующих регулярному выражению.
Пример 1
В следующем примере мы возьмем строку. Мы живем по адресу 9–162, Малибеу. Мой номер телефона – 666688888. Я найду все числа [‘9’, ‘162’, ‘666688888’], присутствующие в строке.
import re str = 'We live at 9-162 Malibeu. My phone number is 666688888.' #search using regex x = re.findall('[0-9]+', str) print(x)
Вывод:
['9', '162', '666688888']
Пример 2: получение списка всех непрерывных цифр в строке
В следующем примере мы возьмем строку: Мы, четверо, живем на 2-й улице Малибеу. У меня в кармане было 248 долларов наличными. Я получил билет с серийным номером 88796451-52. И нахожу все числа [‘2’, ‘248’, ‘88796451’, ’52’], присутствующие в строке.
import re str = 'We four guys, live at 2nd street of Malibeu. I had a cash of $248 in my pocket. I got a ticket with serial number 88796451-52.' #search using regex x = re.findall('[0-9]+', str) print(x)
Вывод:
['2', '248', '88796451', '52']
Мы узнали, как получить все числа в виде строки в виде списка, используя регулярные выражения в Python, с помощью примеров программ.
Skip to content
В этом кратком руководстве показано, как можно быстро извлекать число из различных текстовых выражений в Excel с помощью формул или специального инструмента «Извлечь».
Проблема выделения числа из текста возникает достаточно часто, особенно когда вы работаете с данными, полученными из других программ. К примеру, нужно вытащить почтовый индекс из адреса, номенклатурный номер из строки с наименованием товара, номер счета из платежного документа. Нужное нам число может находиться в любом месте текста — в начале, в середине или в конце.
Вот что мы рассмотрим в этой статье:
- Как извлечь число в конце текста
- Получаем число из начала текста
- Как извлечь все числа из текста
- Извлекаем числа без формул при помощи Ultimate Suite
Когда дело доходит до извлечения части текстового значения заданной длины, Эксель предоставляет три текстовых функции (ЛЕВСИМВ, ПРАВСИМВ и ПСТР) для быстрого выполнения этой задачи. А вот когда дело доходит до извлечения числа из буквенно-цифровой строки, Microsoft Excel … не предоставляет ничего.
Чтобы извлечь число из текста в Excel, требуется немного изобретательности, немного терпения и множество различных функций, вложенных друг в друга.
Или вы можете запустить инструмент «Извлечь (Extract)» из надстройки Ablebits Ultimate Suite и выполнить эту операцию одним щелчком мыши. Ниже вы найдете полную информацию обо всех этих методах.
Как извлечь число из конца текстовой строки.
Если у вас есть столбец буквенно-цифровых значений, в котором число всегда идет после текста, вы можете использовать одну из следующих формул, чтобы вытащить из них числа.
Важное замечание! В приведенных ниже формулах извлечение выполняется с помощью функций ПРАВСИМВ и ЛЕВСИМВ, которые относятся к категории текстовых функций. Эти функции всегда возвращают текст. В нашем случае результатом будет числовая подстрока, которая с точки зрения Excel также является текстом, а не числом. Если вам нужно, чтобы результат был числом (которое можно использовать в дальнейших вычислениях), оберните соответствующую формулу в функцию ЗНАЧЕН, или выполните с ней простейшую математическую операцию (например, двойное отрицание).
Чтобы извлечь число из строки «текстовое число», первое, что вам нужно знать, — это с какой позиции начать операцию. Итак, давайте определим положение первой цифры с помощью этой общего выражения:
=МИН(ПОИСК({0;1;2;3;4;5;6;7;8;9}; ячейка &»0123456789″))
О логике вычислений мы поговорим чуть позже. На данный момент просто замените слово «ячейка» ссылкой на позицию, содержащую исходный текст (в нашем случае A2), и запишите получившееся выражение в любую пустую клетку той же строки, скажем, в B2:
=МИН(ПОИСК({0;1;2;3;4;5;6;7;8;9};A2&»0123456789″))
Хотя формула содержит константу массива, это обычное выражение, которое вводится обычным способом: нажатием клавиши Enter.
Как только позиция первой цифры определена, можно использовать функцию ПРАВСИМВ для извлечения числа. Чтобы узнать, сколько символов нужно извлечь, вы вычитаете позицию первой цифры из общей длины строки и добавляете единицу к результату, потому что первая цифра также должна быть включена:
=ПРАВСИМВ(A2;ДЛСТР(A2)-B2+1)
Где A2 — исходная ячейка, а B2 — позиция первой цифры.
На следующем скриншоте показаны результаты:
Чтобы исключить вспомогательный столбец, содержащий позицию первой цифры, вы можете встроить формулу МИН непосредственно в функцию ПРАВСИМВ следующим образом:
=ПРАВСИМВ(A2;ДЛСТР(A2)-МИН(ПОИСК({0;1;2;3;4;5;6;7;8;9};A2&»0123456789″))+1)
Чтобы формула возвращала именно число, а не числовую строку, вложите ее в функцию ЗНАЧЕН:
=ЗНАЧЕН(ПРАВСИМВ(A2;ДЛСТР(A2)-МИН(ПОИСК({0;1;2;3;4;5;6;7;8;9};A2&»0123456789″))+1))
Или просто примените двойное отрицание, использовав два знака «минус»:
=—ПРАВСИМВ(A2;ДЛСТР(A2)-МИН(ПОИСК({0;1;2;3;4;5;6;7;8;9};A2&»0123456789″))+1)
Другой способ извлечь число из конца строки — использовать вот такое выражение:
=ПРАВСИМВ( ячейка ;СУММ(ДЛСТР( ячейка ) — ДЛСТР(ПОДСТАВИТЬ( ячейка ; {«0″;»1″;»2″;»3″;»4″;»5″;»6″;»7″;»8″;»9″};»»))))
Используя исходный текст в A2, вы записываете приведенную ниже формулу в B2 или любую другую пустую ячейку в той же строке, а затем копируете её вниз по столбцу:
=ПРАВСИМВ(A2;СУММ(ДЛСТР(A2) — ДЛСТР(ПОДСТАВИТЬ(A2; {«0″;»1″;»2″;»3″;»4″;»5″;»6″;»7″;»8″;»9″};»»))))
Примечание. Эти формулы предназначены для случая, когда числа находятся только в конце текстовой строки. Если некоторые цифры также находятся в середине или в начале, то ничего не будет работать.
Этих недостатков не имеет третья формула, которая извлекает только последнее число в тексте, игнорируя все предыдущие:
=ПРАВСИМВ(A2; ДЛСТР(A2) — МАКС(ЕСЛИ(ЕЧИСЛО(ПСТР(A2; СТРОКА(ДВССЫЛ( «1:»&ДЛСТР(A2))); 1) *1)=ЛОЖЬ; СТРОКА(ДВССЫЛ( «1:»&ДЛСТР(A2))); 0)))
На скриншоте ниже вы видите результат ее работы.
Как видите, цифры в начале или в середине текста игнорируются. Также обратите внимание, что результатом, как и в предыдущих формулах, является число, записанное в виде текста. Как превратить его в нормальное число, мы уже рассмотрели выше в этой статье.
Примечание. Если вы используете Excel 2019 или более ранние версии, нужно использовать формулу массива, нажав при вводе комбинацию Ctrl+Shift+Enter
. Если у вас Office365, вводите как обычно, через Enter
.
Как извлечь число из начала текстовой строки
Если вы работаете со строками, в которых текст находится после числа, решение для извлечения числа будет аналогично описанному выше. С той только разницей, что вы используете функцию ЛЕВСИМВ для извлечения из левой части текста:
=ЛЕВСИМВ( ячейка ;СУММ(ДЛСТР( ячейка )-ДЛСТР(ПОДСТАВИТЬ( ячейка ;{«0″;»1″;»2″;»3″;»4″;»5″;»6″;»7″;»8″;»9″};»»))))
Используя этот метод для A2, извлекаем число при помощи такого выражения:
=ЛЕВСИМВ(A2;СУММ(ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(A2;{«0″;»1″;»2″;»3″;»4″;»5″;»6″;»7″;»8″;»9″};»»))))
Это решение работает для текстовых выражений, которые содержат числа только в начале. Если некоторые цифры также находятся в середине или в конце строки, формула не будет работать.
Если вы хотите извлечь только числа слева и игнорировать остальные, воспользуйтесь другой формулой:
=ЛЕВСИМВ(A2;ПОИСКПОЗ(ЛОЖЬ;ЕЧИСЛО(—ПСТР(A2;СТРОКА($1:$94);1));0)-1)
Или чуть модифицируем, чтобы ускорить расчеты:
=ЛЕВСИМВ(A2; ПОИСКПОЗ(ЛОЖЬ; ЕЧИСЛО(ПСТР(A2; СТРОКА(ДВССЫЛ( «1:»&ДЛСТР(A2)+1)); 1) *1); 0) -1)
Если у вас Excel 2019 и ниже, вводите ее как формулу массива, используя Ctrl+Shift+Enter
. В Office365 и выше можно вводить как обычно.
Примечание. Как и в случае с функцией ПРАВСИМВ, функция ЛЕВСИМВ также возвращает числовую подстроку, которая технически является текстом, а не числом.
Как получить число из любой позиции в тексте
Если ваша задача подразумевает извлечение числа из любого места строки, вы можете использовать следующую формулу:
=СУММПРОИЗВ(ПСТР(0&A2; НАИБОЛЬШИЙ(ИНДЕКС(ЕЧИСЛО(—ПСТР(A2; СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))); 1)) * СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))); 0); СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))))+1; 1) * 10^СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2)))/10)
Где A2 — исходная текстовая строка.
Для пояснения, как это работает, потребуется отдельная статья. Поэтому вы можете просто скопировать на свой рабочий лист, чтобы убедиться, что это действительно работает
Обратите внимание, что в этом случае в тексте могут находиться несколько чисел. Все они будут извлечены и объединены в единое целое.
Однако, изучив результаты, вы можете заметить один незначительный недостаток: если исходный текст в ячейке не содержит числа, формула возвращает ноль, как в строке 7 на скриншоте выше. Чтобы исправить это, вы можете заключить формулу в оператор ЕСЛИ, который проверит, содержит ли исходный текст какое-либо число. Если это так, формула извлекает это число, в противном случае возвращает пустую строку:
=ЕСЛИ(СУММ(ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(A2;{«0″;»1″;»2″;»3″;»4″;»5″;»6″;»7″;»8″;»9″};»»)))>0; СУММПРОИЗВ(ПСТР(0&A2; НАИБОЛЬШИЙ(ИНДЕКС(ЕЧИСЛО(—ПСТР(A2; СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))); 1)) * СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))); 0); СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2))))+1; 1) * 10^СТРОКА(ДВССЫЛ(«1:»&ДЛСТР(A2)))/10);»»)
В отличие от всех предыдущих примеров, результатом этих формул является число. Чтобы убедиться в этом, просто обратите внимание на выровненные по правому краю значения в столбце B и усеченные ведущие нули (например, 88 вместо 088).
Если число, которое вы хотите извлечь, ограничено какими-то знаками-разделителями, то можно использовать функцию ПСТР. Рассмотрим пример, как получить номер счета из текста платежа.
Мы будем искать позицию знака «№» и позицию следующего за ним первого пробела. То, что находится между ними, как раз и будет номером счёта:
=ПСТР(ПОДСТАВИТЬ(A2;» «;»»);НАЙТИ(«№»;ПОДСТАВИТЬ(A2;» «;»»))+1;НАЙТИ(» «;A2;НАЙТИ(«№»;A2;1))-НАЙТИ(«№»;A2;1)-1)
На скриншоте ниже вы видите, как это работает.
Вот еще один возможный вариант вынимания числа из текста. Необходимо извлечь первое встретившееся число из текста.
Используем формулу
=ПРОСМОТР(2^64;—ЛЕВСИМВ(ПСТР(A1&»_0″;МИН(НАЙТИ({0;1;2;3;4;5;6;7;8;9};A1&»_0123456789″));15); {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}))
или заменяем список цифр функцией:
=ПРОСМОТР(2^64;—ЛЕВСИМВ(ПСТР(A1&»_0″;МИН(НАЙТИ({0;1;2;3;4;5;6;7;8;9};A1&»_0123456789″));15); СТРОКА($A$1:$IV$16)))
Как видите, получаем только первое число, независимо от его расположения:
И еще один пример. Давайте попробуем достать все числа из текста, разграничив их каким-то разделителем. Например, дефисом “-“.
В этом случае придется использовать формулу массива:
{=ПОДСТАВИТЬ(СЖПРОБЕЛЫ(СЦЕП(ЕСЛИ(ЕЧИСЛО(—ПСТР(A2;СТРОКА($1:$94);1));ПСТР(A2;СТРОКА($1:$94);1);» «)));» «;»-«)}
Мы нашли все числа в тексте, как вы видите на скриншоте ниже:
Откорректировав эту формулу, вы можете использовать любой другой разделитель.
Поскольку между ними есть разделители, то вы легко можете распределить эти числа в отдельные ячейки. Как это сделать — читайте в материале 8 способов разделить ячейку Excel на две или несколько.
Как выделить число из текста с помощью Ultimate Suite
Как вы только что видели, не существует простой и понятной формулы Excel для извлечения чисел из текстовой строки. Если у вас есть трудности с пониманием формул или их настройкой для ваших наборов данных, вам может понравиться этот простой способ получить число из текста в Excel.
С надстройкой Ultimate Suite, добавленной на вашу ленту Excel, вы можете быстро получить число из любой буквенно-цифровой строки:
- Перейдите на вкладку Ablebits Data > Text и нажмите Извлечь (Extract) :
- Выделите все ячейки с данными, которые нужно обработать.
- На панели инструмента «Извлечь (Extract)» установите переключатель «Извлечь числа (Extract numbers)».
- В зависимости от того, хотите ли вы, чтобы результаты были формулами или значениями, выберите поле «Вставить как формулу (Insert as formula)» или оставьте его пустым (по умолчанию).
Я советую активировать это поле, если вы хотите, чтобы извлеченные числа обновлялись автоматически, как только в исходные значения вносятся какие-либо изменения. Если нужно, чтобы результаты не зависели от будущих изменений (например, если вы планируете удалить исходные данные позже), не используйте эту опцию.
- Нажмите кнопку «Вставить результаты (Insert Results)». Готово!
Как и в предыдущем примере, результаты извлечения являются числами. Это означает, что вы можете подсчитывать, суммировать, усреднять или выполнять любые другие вычисления с ними.
Если установлен флажок «Вставить как формулу», вы увидите выражение в строке формул. Любопытно узнать, какое именно? Просто скачайте пробную версию Ultimate Suite и убедитесь сами
Если вы хотите иметь это, а также еще более 60 полезных инструментов в Excel, воспользуйтесь этой надстройкой.
Я постарался дать вам максимально полные рекомендации, какими способами можно извлечь число из текста. Конечно, они не могут охватить все возможные случаи. Поэтому если встретилось что-то особенно заковыристое — не стесняйтесь писать в комментариях. Постараюсь помочь по мере сил.
Как определить цифру из данного числа?
Например, число 1337 состоит из 4 цифр. Как узнать вторую цифру ?
задан 20 ноя 2017 в 4:46
tonymoretonymore
3292 серебряных знака16 бронзовых знаков
6
string str = 1337.ToString();
Console.WriteLine(str[1]);
нумерация в строках такая же как и в массивах, но доступ по индексу к элементу доступен только для чтения
ответ дан 20 ноя 2017 в 4:55
AlexandrAlexandr
4542 серебряных знака15 бронзовых знаков
Способ без превращения числа в строку (будет работать быстрее):
static void Main(string[] args)
{
int n = 534534623;
int d = GetSecondDigit(n);
Console.WriteLine(d);
Console.ReadKey();
}
static int GetSecondDigit(int k)
{
while (k >= 100) k /= 10;
int d = k % 10;
return d;
}
Хотя, конечно, если у вас на входе строка, то проще получить второй символ по индексу (как в соседнем ответе).
ответ дан 20 ноя 2017 в 6:08
Андрей NOPАндрей NOP
28.3k4 золотых знака39 серебряных знаков77 бронзовых знаков
Делим без остатка на 100, затем берём остаток от деления на 10. Не понимаю, зачем вам отправили конвертацию в строку и даже отдельную функцию с циклом.
ответ дан 23 дек 2020 в 20:43
ПавелПавел
543 бронзовых знака
1
Console.WriteLine("Введите трехзначное число");
int.TryParse(Console.ReadLine()!, out int k);
if (k>999 || k<100)
{
Console.WriteLine("Не трехзначное число!!!");
return;
}
int GetSecond(int k)
{
while (k >= 100) k /= 10;
int d = k % 10;
return d;
}
Console.WriteLine(GetSecond(k));
мэйби как то так?
ответ дан 16 мар в 11:07
1
Извлечь из строки числа
Дана строка, содержащая натуральные числа и слова. Необходимо сформировать список из чисел, содержащихся в этой строке. Например, задана строка «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