С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 2 / 0
Регистрация: 22.01.2016
Сообщений: 44
1

Формула регулярных выражений

14.10.2019, 16:45. Показов 1333. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа выводит строку string s, которая содержит текст:

Файл РО№121.19

Требуется считать ее с помощью регулярных выражений, учитывая, что слова могут быть любым как и число. "№" - единственный постоянный элемент
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2019, 16:45
Ответы с готовыми решениями:

Синтаксис регулярных выражений в C++
Помогите пожалуйста.... Исходный текст - "Miguel_Rivero: {FFCD00}текст" преобразуется в - "тест...

Составление регулярных выражений
Доброго времени суток, у меня проблема с регулярными выражениями. Нужно составить так регулярное...

Синтаксис регулярных выражений
Здравствуйте. Правильно ли написано выражение в данном случае? Работает не совсем корректно....

Компиляция шаблонов регулярных выражений (regex)
#include<regex> using namespace std; int main() { const string...

11
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
14.10.2019, 18:42 2
ruse_89, А что именно нужно выделить из строки с помощью регулярных выражений? или проверить на корректность?
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
14.10.2019, 20:11 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <regex>
 
int main()
{
    const std::string str{"PO№121.19 LZ№111 EX№121.194"};
    const std::regex reg{R"(([a-zA-Z]+)(№)([0-9]+(\.|\,)?[0-9]*))"};
    
    for(auto it = std::sregex_iterator{str.begin(), str.end(), reg}; it != std::sregex_iterator{}; ++it)
    {
        std::cout << it -> str(1) << " " << it->str(3) << std::endl;
    }
}
1
2 / 2 / 0
Регистрация: 22.01.2016
Сообщений: 44
14.10.2019, 23:34  [ТС] 4
Peoples, Спасибо большое! Завтра попробую проверить.
Еще один вопрос... мне также надо с помощью регулярок считать из текста вот такой кусок:

0; 0; 373123; # ; 0; 0
0; 0; 333141; # ; 0; 0
0; 0; 555839; ; 0; 0; ; 42; 1
0; 0; 337481; long -117213139; 158483911; ; 1; 1

Проблема в том, что кол-во строк и столбцов таблицы могут меняться как и их содержимое. Отличительно чертой является то, что перед ней всегда пропущена строка. Точка с запятой не всегда являются разделителями столбцов...
Заранее спасибо за помощь
0
60 / 45 / 17
Регистрация: 12.08.2019
Сообщений: 161
14.10.2019, 23:58 5
Считывайте файл построчно и заполняйте поля структуры. Регулярки тут не совсем к месту.
И лучше показать хоть один реальный файл.
1
2 / 2 / 0
Регистрация: 22.01.2016
Сообщений: 44
15.10.2019, 00:02  [ТС] 6
QuestionAnd, Там даже не файл, просто с сервера ответ приходит и выводится на консоль в виде текста и таблицы, которые разделены пропуском. Мне нужно как-то считать саму таблицу
0
60 / 45 / 17
Регистрация: 12.08.2019
Сообщений: 161
15.10.2019, 00:06 7
Скопировать из консоли нельзя на форум этот самый ответ ?

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

Не по теме:

зачем спасибки ставить просто так ? )

1
2 / 2 / 0
Регистрация: 22.01.2016
Сообщений: 44
15.10.2019, 00:11  [ТС] 8
QuestionAnd, Один ответ на определенный запрос:
Файл 12№1.19
Длина-Данных: 112
label: 55847391
ИД-Сообщения: ss7283r`ie2

0; 0; 373123; # ; 0; 0
0; 0; 333141; # ; 0; 0
0; 0; 555839; ; 0; 0; ; 42; 1
0; 0; 337481; # -117213139; 158483911; ; 1; 1

А это уже ответ на другой запрос:
Файл РО№121.19
Длина-Данных: 221
label: 5473821
ИД-Сообщения: ss7348sQlk001

0:02:53; 15-10-2019; 4443 0
0:03:48; 15-10-2019; 4443 0
0:04:12; 15-10-2019; 4443 0
0:05:01; 15-10-2019; 4443 0
0:06:68; 15-10-2019; 4443 0
0:07:17; 15-10-2019; 4443 0
0:08:44; 15-10-2019; 4443 0
P.S я благодарен уже тому, что люди находят время и отвечают на мои сообщения
0
60 / 45 / 17
Регистрация: 12.08.2019
Сообщений: 161
15.10.2019, 00:16 9
Замечательно.
Опишите что в таблице подробнее . что хотите из таблицы получить?
Просто массив строк ?
Во второй таблице , в первом столбце время , затем дата ...
1
2 / 2 / 0
Регистрация: 22.01.2016
Сообщений: 44
15.10.2019, 00:20  [ТС] 10
QuestionAnd, Да, просто массив строк. Потому что в таблицах может быть что угодно - все зависит от параметров, указанных в запросе.
Во второй таблице время, дата, длинна данных, код ошибки
0
60 / 45 / 17
Регистрация: 12.08.2019
Сообщений: 161
15.10.2019, 01:02 11
Лучший ответ Сообщение было отмечено ruse_89 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
 
 
struct response {
    std::string file;
    std::size_t data_length;
    std::string label;
    std::string message_id;
    std::vector<std::string> table;
};
 
//  печать структуры для проверки 
void print_struct(const response &res) {
    std::cout << res.file << "\n";
    std::cout << res.data_length << "\n";
    std::cout << res.label << "\n";
    std::cout << res.message_id << "\n";
    for (const auto &s: res.table)
        std::cout << s << "\n";
}
 
int main() {
    std::ifstream infile("response.txt");
 
    if (!infile)  // проверить открылся файл 
    {
        std::cerr << "Failed to open file\n";
        return EXIT_FAILURE;
    }
    response res; // структура которую заполняем 
    std::string str;
 
    // считывание полей структуры
    infile >> str >> res.file;
    infile >> str >> res.data_length;
    infile >> str >> res.label;
    infile >> str >> res.message_id;
 
    // пропустить пустую строку
    std::getline(infile, str);
 
    // считывание таблицы
    while (std::getline(infile, str))
        res.table.push_back(str);
 
    infile.close();  // закрыть файл
 
    // напечатать структуру
    print_struct(res);
}
1
2 / 2 / 0
Регистрация: 22.01.2016
Сообщений: 44
15.10.2019, 21:19  [ТС] 12
QuestionAnd, Спасибо, но это не совсем то. Ответ по содержанию не всегда совпадает со структурой. Бывает так что в одном ответе 3 параметра и таблица, а в другом уже 5. Собственно, поэтому я и использовал регулярки, чтобы распознавать конкретный параметр и заносить его в поле структуры. Я сделал структуру на все виды параметров и с помощью регулярок считывал нужное
И использование файлов противопоказано... Открытие и закрытие сильно грузят систему... Все пытаюсь придумать другой путь, помимо записи в файлы
0
15.10.2019, 21:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2019, 21:19
Помогаю со студенческими работами здесь

Организовать поиск по файлу с помощью регулярных выражений
Как организовать поиск по файлу с помощью регулярных выражений? Подскажите хорошую статью.

Достать из текста все совпадения с помощью регулярных выражений
Здравствуйте помогите решить задачу. Есть текст : Set: wer=b5b0231b05825d0001; expires=Wed, 02...

Вывести информацию в заданном формате без регулярных выражений
Задан vector&lt;string&gt; содержащий url. Например: std::vector&lt;std::string&gt; url; ...

Калькулятор с помощью регулярных выражений
Здравствуйте. Мне необходимо написать программу-калькулятор на Borland C++ Builder с использованием...

QCompleter фильтр с помощью регулярных выражений
В списке например есть значения: М 20х20 М 15х15 М 10х10 Нужно, чтобы completer выдавал...

Каким классом вы пользуетесь, когда дело доходит до регулярных выражений?
Каким классом вы пользуетесь, когда дело доходит до регулярных выражений? Добавлено через 12...


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

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