- Формула для определения цифр в ячейке
- Макрос “Обнаружить цифры” в !SEMTools
- Как в Excel из всех цифр найти только определённые нужные цифры
- Найти нужные цифры с помощью регулярных выражений в !SEMTools
- Найти нужные цифры формулой
- Найти определённые отдельные слова-числа в тексте
- Преобразовать числа в текст
- Заключение
Периодически возникает ситуация, когда нужно найти в диапазоне ячеек числа, но они могут быть вперемешку с текстом, что сильно затрудняет такой поиск.
Прежде всего, определимся с понятиями. Обнаружить в общем случае это выявить, существует или не существует искомое значение в ячейке. Результатом срабатывания такой функции будет булевое значение — ИСТИНА или ЛОЖЬ.
Если же мы захотим не только обнаружить в ячейке цифры, но и произвести дополнительные действия, об этом можно почитать в других разделах:
- извлечь цифры из текста в Excel;
- удалить цифры из ячеек.
Цифры – это собирательное понятие, включающее в себя целый десяток символов. Чтобы обнаружить, содержит ли ячейка цифры, нужно сделать 10 проверок — по 1 на каждую цифру — 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Один из примеров такого “подхода в лоб” использован в описании функции ЕСЛИ на этом сайте.
Но есть ли способ заменить 10 проверок 1 проверкой, которая включала бы их все?
К сожалению, простой функции в Excel нет, но можно комбинировать несколько формул, в том числе формулу массива, чтобы получить необходимый результат.
Формула для определения цифр в ячейке
Формула ниже вернёт ИСТИНА или ЛОЖЬ, не самый простой и запоминающийся синтаксис, однако отлично справляется с задачей.
=СЧЁТ(ПОИСК({1:2:3:4:5:6:7:8:9:0};A1))>0
Синтаксис функции тот же, что и для поиска кириллицы или латиницы в тексте.
Пожалуй, наиболее простое решение, доступное после подключения !SEMTools к Excel. Копируем исходный столбец, применяем макрос и получаем результат на месте.
Как в Excel из всех цифр найти только определённые нужные цифры
Чтобы найти только нужные цифры, например, только чётные или только нечётные, есть два способа — с помощью регулярных выражений и с помощью адаптации формулы выше.
Найти нужные цифры с помощью регулярных выражений в !SEMTools
Пользователям надстройки !SEMTools доступны возможности использования функций регулярных выражений. Синтаксис довольно прост — перечисляем в квадратных скобках любые нужные вам цифры и жмем ОК. С его же помощью можно найти латиницу или обнаружить заглавные буквы.
Найти нужные цифры формулой
Можно адаптировать под задачу сложную формулу массива, описанную выше, использующую функции СЧЁТ и ПОИСК, выглядеть будет так:
=СЧЁТ(ПОИСК({2:4:6:8:0};A1))>0
Она же позволяет находить не только цифры, но и числовые последовательности любой длины.
=СЧЁТ(ПОИСК({01:02:03:911:112};A1))>0
Найти определённые отдельные слова-числа в тексте
Иногда поиск чисел осложняется тем, что важно найти их не по вхождению в ячейку, а по точному совпадению конкретного числа. По сути в таком случае число будет считаться словом и нужно найти слово в ячейке, а если таких чисел несколько — найти слова из списка. Соответствующие процедуры !SEMTools позволяют это сделать.
На примере ниже мы ищем 1 как отдельное слово, при этом пропуская числа, содержащие его (например, 10).
Преобразовать числа в текст
Иногда нужно не только найти числа в тексте, но преобразовать числа в текст, а возможно, и изменить морфологию полученного текста. Смотрите, как это сделать, в соответствующих разделах:
- Число прописью в Excel;
- Склонение чисел в Excel.
Заключение
Надеюсь, этот раздел помог вам решить задачу поиска нужных цифр и чисел в ячейках. Если нет — смело обращайтесь к автору надстройки и этого сайта. Наверняка после обнаружения необходимых данных вам потребуется их извлечь, удалить или как-то изменить — обращайтесь к соответствующим разделам сайта, чтобы выяснить, как это сделать.
Столкнулись с необходимостью найти цифры в ячейках Excel?
Скачайте !SEMTools и решите эту и сотни других задач за пару кликов!
2 / 2 / 0 Регистрация: 05.12.2013 Сообщений: 316 |
|
1 |
|
Найти числа в строке18.06.2019, 15:02. Показов 25950. Ответов 13
Добрый день! Пишу небольшую программу и появилась необходимость найти в строке с текстом найти числа и вывести их в label. Всё бы было просто, если бы цифры имели всегда одинаковую длину, то я бы их просто вырезал Substring, но нет каждый раз числа могу быть разных размеров, допустим, пример строк:
0 |
Immo 692 / 509 / 238 Регистрация: 02.10.2012 Сообщений: 1,737 |
||||
18.06.2019, 15:18 |
2 |
|||
0 |
Rbhbkk-00 4 / 3 / 1 Регистрация: 11.04.2016 Сообщений: 13 |
||||
18.06.2019, 15:19 |
3 |
|||
0 |
2 / 2 / 0 Регистрация: 05.12.2013 Сообщений: 316 |
|
18.06.2019, 15:23 [ТС] |
4 |
Immo, а как можно каждое отдельное число записать в отдельный label?
0 |
Immo 692 / 509 / 238 Регистрация: 02.10.2012 Сообщений: 1,737 |
||||||||
18.06.2019, 15:36 |
5 |
|||||||
Добавлено через 2 минуты
2 |
2 / 2 / 0 Регистрация: 05.12.2013 Сообщений: 316 |
|
18.06.2019, 16:10 [ТС] |
6 |
Immo, Клёво, действительно работает, только я забыл указать, что в конце строки ставится rn и оно не видит последнее число. И также подскажите, пожалуйста, что означает @»^d+$?
0 |
Элд Хасп Модератор 13780 / 9992 / 2661 Регистрация: 21.04.2018 Сообщений: 29,763 Записей в блоге: 2 |
||||||||
18.06.2019, 16:19 |
7 |
|||||||
только я забыл указать, что в конце строки ставится rn и оно не видит последнее число
Добавлено через 2 минуты
1 |
2 / 2 / 0 Регистрация: 05.12.2013 Сообщений: 316 |
|
18.06.2019, 16:28 [ТС] |
8 |
Элд Хасп, подскажите, пожалуйста, а где взять out int _tmp?
0 |
Элд Хасп Модератор 13780 / 9992 / 2661 Регистрация: 21.04.2018 Сообщений: 29,763 Записей в блоге: 2 |
||||
18.06.2019, 16:35 |
9 |
|||
подскажите, пожалуйста, а где взять out int _tmp? Нигде. Это временная переменная. Необходима для работы метода Добавлено через 2 минуты
0 |
2727 / 1644 / 869 Регистрация: 14.04.2015 Сообщений: 5,611 |
|
18.06.2019, 16:35 |
10 |
MAKC13, нигде, там же скобка только лишняя. в этом месте _tmp)))
0 |
Diamante 3458 / 2465 / 1170 Регистрация: 14.08.2016 Сообщений: 8,160 |
||||
18.06.2019, 16:36 |
11 |
|||
на выходе массив чисел
0 |
2 / 2 / 0 Регистрация: 05.12.2013 Сообщений: 316 |
|
18.06.2019, 16:40 [ТС] |
12 |
Элд Хасп, всё равно ругается на int _tmp, пишет будто бы нет такой переменной.
0 |
Diamante 3458 / 2465 / 1170 Регистрация: 14.08.2016 Сообщений: 8,160 |
||||
18.06.2019, 16:54 |
13 |
|||
Решениелибо используй fw 4.5+, либо
0 |
Модератор 13780 / 9992 / 2661 Регистрация: 21.04.2018 Сообщений: 29,763 Записей в блоге: 2 |
|
18.06.2019, 17:14 |
14 |
ругается на int _tmp, пишет будто бы нет такой переменной.
Добавлено через 1 минуту
1 |
Найти строки, содержащие числа
grep, regexp
0
1
Хочу из файла вытащить все строки, содержащие натуральные числа, но не в начале строки. Пробую так:
grep -E '[^^][1-9]?[0-9]+' file.txt
Но это все равно выводит строчки, начинающиеся с двухзначных или более чисел, хотя не выводит строки, в начале которых стоит одна цифра. Почему так получается и как это исправить? Вроде явно же указал, что первый символ — не начало строки, должно работать.
- Ссылка
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
1 ответ
Если я правильно понял, что вам нужно, то я бы использовал Regular expressions. Можете подробнее посмотреть в интернете
import re
string = "2acacac"
numbers = r"d"
result = re.findall(numbers, string)
А дальше уже из переменной result, впринципе, можете работать
ответ дан 22 сен 2018 в 6:16
Karlson21Karlson21
3382 серебряных знака12 бронзовых знаков
7
-
Отлично, да вы правильно поняли. А как теперь в переменную numbers сохранять только буквы?
22 сен 2018 в 7:12
-
Цифры у вас сохранены в переменной result, для букв можно сделать отдельную переменную, например symbol=r»D», и с помрщью result_1=(symbol, string) получить отдельно буквы. Советую сайт regex101.com для тренировки.
22 сен 2018 в 7:59
-
Спасибо за помощь! Можете помочь с еще одной задачей: допустим, на вход подается строка по типу: «(15a)b», и нам надо преобразовать эту строку в 15 букв a, и на последнем месте букву b, то есть ‘aaaaaaaaaaaaaaab’, как это сделать?
22 сен 2018 в 10:19
-
Впринципе, через тот же re.findall можно достать из строки сначала цифру или число, а затем буквы. А после уже выполнить что нужно. Для того чтобы достать елиное число, а не по одной цифре, достаточно добавить после d плюс, т.е. d+
22 сен 2018 в 10:32
-
Пробовал, но в примере с числом 15, он воспринимает его как ‘1’ и ‘5’ в этом проблема.
22 сен 2018 в 10:34
What is the regex to extract all lines beginning with a digit?
I know the ^
character is used to match anything at the beginning of the line but I am not constructing it correct.
Here is what I have tried :
re.findall('^[0-9]+',mystring).
asked Aug 21, 2016 at 18:33
4
I’m guessing you want to match the entire the line but it is only matching the starting number. You need to include the greedy wildcard as well as the multiline argument to tell it you want to search many lines. Try:
re.findall('^[0-9].*', mystring, re.MULTILINE)
answered Aug 21, 2016 at 18:39
2
You forget the re.MULTILINE
modifier and .*
after [0-9]
to match the rest of the line. If you were to use a regex, you would use r"(?m)^[0-9].*"
:
re.findall(r"(?m)^[0-9].*", mystring)
The (?m)
multiline inline modifier, equal to re.MULTILINE
or re.M
options, makes ^
match start of lines and $
match end of lines, not just start/end of the whole string.
However, it is not the best way. Split with n and iterate through the lines checking if the first char is a digit.
Here is what I suggest:
with open('file', 'r') as f:
for line in f:
if line and line[0].isdigit():
print(line)
See this Python demo
answered Aug 21, 2016 at 18:43
Wiktor StribiżewWiktor Stribiżew
603k37 gold badges435 silver badges547 bronze badges
4