63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
1

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

29.05.2022, 22:12. Показов 969. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Надо распарсить строку по числам, я вроде как минимально разбираюсь в регулярных выражениях и сделал что-то вроде такого
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    std::string s{"1500-2500"};
    auto rgx = std::regex{"[0-9]*"};
    auto matches = std::smatch{};
    if(std::regex_search(s, matches, rgx))
    {
        std::cout << matches.size() << std::endl;
    }
}
выводит 1, почему?)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2022, 22:12
Ответы с готовыми решениями:

Найти все числа в строке и вывести каждое число в отдельной строке (ошибка в коде)
Помогите пожалуйста с кодом. Задание такое: Найти все числа в строке, каждое число вывести в...

Найти в строке число (regex)
Получить номер строки в файле где есть число больше 60 при помощи regex.

Regex и найти в строке значения года
Всем привет, есть строка Например: &quot;Telephone: +380000000000, +380000000001, +380000000002,...

Найти вхождения выражения в строке (regex)
Как найти позицию вхождения выражения в строке?

Найти все числа в строке
Есть текст вида: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaa&lt;b&gt;&lt;font size=3...

5
216 / 81 / 35
Регистрация: 29.10.2021
Сообщений: 304
29.05.2022, 22:54 2
[0-9]* что это ??? цифр может не быть?

нужно [0-9]+

Цитата Сообщение от ReYalp Посмотреть сообщение
выводит 1, почему?)
первое совпадение потому что.

Цитата Сообщение от ReYalp Посмотреть сообщение
Regex найти все числа в строке
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <regex>
 
int main ()
{
  std::string s{"1500-2500"};
  auto rgx = std::regex { "[0-9]+" };
  std::smatch matches;
 
  while (std::regex_search (s, matches, rgx))
    {
      std::cout << matches.str () << '\n';
      s = matches.suffix ();
    }
}
1500
2500
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
29.05.2022, 23:00 3
Лучший ответ Сообщение было отмечено ReYalp как решение

Решение

C++
1
2
3
4
    std::string str="1234 5678";
    std::regex regex("\\d+");
    for(std::sregex_iterator pos={str.begin(),str.end(),regex};pos!=std::sregex_iterator();++pos)
        std::cout<<(*pos)[0]<<std::endl;
Цитата Сообщение от WhiteBelt Посмотреть сообщение
s = matches.suffix ();
Будет на каждой итерации дергать динамическую память, чтобы создать подстроку-суффикс. Так себе эффективность выйдет.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
29.05.2022, 23:15  [ТС] 4
Renji, у меня разделитель '-' в строке и должно быть два числа, наверное лучше свой кастомный метод написать для парсинга двух чисел
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
29.05.2022, 23:22 5
Лучший ответ Сообщение было отмечено ReYalp как решение

Решение

Если нужно получить не все числа, а ровно два числа, тогда так:
C++
1
2
3
4
    std::string str="1234-5678";
    int x,y;
    sscanf(str.data(),"%d-%d",&x,&y);
    std::cout<<x<<" "<<y<<std::endl;
Или, если именно через регулярки, то так:
C++
1
2
3
4
5
    std::string str="1234-5678";
    std::regex regex("(\\d+)\\-(\\d+)");
    std::smatch match;
    if(std::regex_match(str,match,regex))
        std::cout<<match[1]<<" "<<match[2]<<std::endl;
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
29.05.2022, 23:25  [ТС] 6
Renji, там ещё условий много, текст может быть любой, надо проверять правильность ввода(формат число-число), не вижу варианта лучше чем в цикле через isdigit проверять
0
29.05.2022, 23:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2022, 23:25
Помогаю со студенческими работами здесь

Найти все числа в строке
Дается строка S.Нужно посчитать все числа которые встречаются в ней. Пример входных...

Найти все двузначные числа в строке
public class App_cons_2 { public static boolean isDigit(char c) { return (c &gt;= 48...

Найти все числа палиндромы в строке С++
Помогите пожалуйста.Буду очень благодарен. Вот все что смог написать #include&lt;windows.h&gt;...

Вывести строку из файла. Найти все целые числа, находящиеся в строке. Найти сумму этих чисел
Помогите, пожалуйста, с задачей на паскале. Необходимо вывести строку из файла. Найти все целые...

Как найти все действительные числа в строке?
Есть строка в ней &quot; слово 125 бла бла 4,5&quot; нужно вывести так целые числа 125 действительные...

[Regex] Найти количество тройных подряд идущих символов в строке
Найти количество тройных подряд идущих символов в строке используя регулярные выражения.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru