Как найти строчки с цифрами

  • Формула для определения цифр в ячейке
  • Макрос “Обнаружить цифры” в !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

Как в Excel из всех цифр найти только определённые нужные цифры

Чтобы найти только нужные цифры, например, только чётные или только нечётные, есть два способа — с помощью регулярных выражений и с помощью адаптации формулы выше.

Найти нужные цифры с помощью регулярных выражений в !SEMTools

Пользователям надстройки !SEMTools доступны возможности использования функций регулярных выражений. Синтаксис довольно прост — перечисляем в квадратных скобках любые нужные вам цифры и жмем ОК. С его же помощью можно найти латиницу или обнаружить заглавные буквы.

найти четные цифры в числах в Excel

Находим только ячейки с четными цифрами в Excel с !SEMTools

Найти нужные цифры формулой

Можно адаптировать под задачу сложную формулу массива, описанную выше, использующую функции СЧЁТ и ПОИСК, выглядеть будет так:

=СЧЁТ(ПОИСК({2:4:6:8:0};A1))>0

Она же позволяет находить не только цифры, но и числовые последовательности любой длины.

=СЧЁТ(ПОИСК({01:02:03:911:112};A1))>0

Найти определённые отдельные слова-числа в тексте

Иногда поиск чисел осложняется тем, что важно найти их не по вхождению в ячейку, а по точному совпадению конкретного числа. По сути в таком случае число будет считаться словом и нужно найти слово в ячейке, а если таких чисел несколько — найти слова из списка. Соответствующие процедуры !SEMTools позволяют это сделать.

На примере ниже мы ищем 1 как отдельное слово, при этом пропуская числа, содержащие его (например, 10).

Найти отдельные числа в тексте в Excel

Ищем отдельно стоящее число в тексте

Преобразовать числа в текст

Иногда нужно не только найти числа в тексте, но преобразовать числа в текст, а возможно, и изменить морфологию полученного текста. Смотрите, как это сделать, в соответствующих разделах:

  • Число прописью в Excel;
  • Склонение чисел в Excel.

Заключение

Надеюсь, этот раздел помог вам решить задачу поиска нужных цифр и чисел в ячейках. Если нет — смело обращайтесь к автору надстройки и этого сайта. Наверняка после обнаружения необходимых данных вам потребуется их извлечь, удалить или как-то изменить — обращайтесь к соответствующим разделам сайта, чтобы выяснить, как это сделать.

Столкнулись с необходимостью найти цифры в ячейках Excel?
Скачайте !SEMTools и решите эту и сотни других задач за пару кликов!

2 / 2 / 0

Регистрация: 05.12.2013

Сообщений: 316

1

Найти числа в строке

18.06.2019, 15:02. Показов 25950. Ответов 13


Студворк — интернет-сервис помощи студентам

Добрый день! Пишу небольшую программу и появилась необходимость найти в строке с текстом найти числа и вывести их в label. Всё бы было просто, если бы цифры имели всегда одинаковую длину, то я бы их просто вырезал Substring, но нет каждый раз числа могу быть разных размеров, допустим, пример строк:
В строке есть числа 234 2222 2 43;
В строке есть числа 24 222256 21 243
В строке есть числа 4 22 2 4333
Подскажите, пожалуйста, как их можно вытащить из строчки?



0



Immo

692 / 509 / 238

Регистрация: 02.10.2012

Сообщений: 1,737

18.06.2019, 15:18

2

C#
1
2
            string str = "В строке есть числа 24 222256 21 243";
            Console.WriteLine(str.Where(x => Char.IsDigit(x)).ToArray());



0



Rbhbkk-00

4 / 3 / 1

Регистрация: 11.04.2016

Сообщений: 13

18.06.2019, 15:19

3

C#
1
2
string str = "24 222256 21 243";
str.Split(' ');



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

C#
1
2
string[] strarr = "В строке есть числа 24 222256 21 243".Split(' ');
            string[] resultarr = strarr.Where(x => Regex.IsMatch(x, @"^d+$")).ToArray();

Добавлено через 2 минуты
ну как присвоить я думаю не составит труда

C#
1
label1.Text = resultarr[элемент];



2



2 / 2 / 0

Регистрация: 05.12.2013

Сообщений: 316

18.06.2019, 16:10

 [ТС]

6

Immo, Клёво, действительно работает, только я забыл указать, что в конце строки ставится rn и оно не видит последнее число. И также подскажите, пожалуйста, что означает @»^d+$?



0



Элд Хасп

Модератор

Эксперт .NET

13780 / 9992 / 2661

Регистрация: 21.04.2018

Сообщений: 29,763

Записей в блоге: 2

18.06.2019, 16:19

7

Цитата
Сообщение от MAKC13
Посмотреть сообщение

только я забыл указать, что в конце строки ставится rn и оно не видит последнее число

C#
1
2
3
char[] separtors = " rn"'".ToCharArray(); // Строка сепараторов
string[] strarr = "В строке есть числа 24 222256 21 243".Split(separtors);
string[] resultarr = strarr.Where(x => int.TryParse(x, out int _tmp))).ToArray();

Добавлено через 2 минуты

C#
4
int[] intarr = resultarr.Select(int.Parse).ToArray(); /// Числовой массив



1



2 / 2 / 0

Регистрация: 05.12.2013

Сообщений: 316

18.06.2019, 16:28

 [ТС]

8

Элд Хасп, подскажите, пожалуйста, а где взять out int _tmp?



0



Элд Хасп

Модератор

Эксперт .NET

13780 / 9992 / 2661

Регистрация: 21.04.2018

Сообщений: 29,763

Записей в блоге: 2

18.06.2019, 16:35

9

Цитата
Сообщение от MAKC13
Посмотреть сообщение

подскажите, пожалуйста, а где взять out int _tmp?

Нигде. Это временная переменная. Необходима для работы метода TryParse. Она создаётся и сразу уничтожается.

Добавлено через 2 минуты
Там скобка, по-моему лишняя.
Писал здесь — не заметил.

C#
3
string[] resultarr = strarr.Where(x => int.TryParse(x, out int _tmp)).ToArray();



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

C#
1
2
var str = "В строке есть числа 24 222256 21 243";
var result = Regex.Matches(str,@"d+").Cast<Match>().Select(x=>int.Parse(x.ToString)).ToArray();

на выходе массив чисел



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

Лучший ответ Сообщение было отмечено MAKC13 как решение

Решение

либо используй fw 4.5+, либо

C#
1
2
int _tmp;
string[] resultarr = strarr.Where(x => int.TryParse(x, out _tmp)).ToArray();



0



Модератор

Эксперт .NET

13780 / 9992 / 2661

Регистрация: 21.04.2018

Сообщений: 29,763

Записей в блоге: 2

18.06.2019, 17:14

14

Цитата
Сообщение от MAKC13
Посмотреть сообщение

ругается на int _tmp, пишет будто бы нет такой переменной.

out не пропустили спереди?

Добавлено через 1 минуту
Если FW старый, то сделайте как в посте #13 от Diamante.



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

Karlson21's user avatar

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).

Wiktor Stribiżew's user avatar

asked Aug 21, 2016 at 18:33

Prashant Bhanarkar's user avatar

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

gowrath's user avatar

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żew's user avatar

Wiktor StribiżewWiktor Stribiżew

603k37 gold badges435 silver badges547 bronze badges

4

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как исправить очень плохую кредитную историю после просрочек
  • Как найти энергию фототока
  • Как найти расстояние времени со скоростью
  • Как найти лишние пробелы в excel
  • Ассасин крид синдикат тормозит как исправить

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии