weixin_46027762 2023-06-05 16:45 采纳率: 64.7%
浏览 27
已结题

怎么利用正则表达式分解字符串

比如说这种长字符串

Mon Nov 22 22:00:00 2021
Setting Resource Manager plan SCHEDULER[0x32D9]:DEFAULT_MAINTENANCE_PLAN via scheduler window
Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter
Mon Nov 22 22:00:00 2021
Starting background process VKRM
Mon Nov 22 22:00:00 2021
VKRM started with pid=45, OS id=17094
Mon Nov 22 22:00:02 2021
Begin automatic SQL Tuning Advisor run for special tuning task  "SYS_AUTO_SQL_TUNING_TASK"
Mon Nov 22 22:01:05 2021
End automatic SQL Tuning Advisor run for special tuning task  "SYS_AUTO_SQL_TUNING_TASK"
Tue Nov 23 02:00:00 2021
Closing scheduler window
Closing Resource Manager plan via scheduler window
Clearing Resource Manager plan via parameter
Tue Nov 23 10:05:52 2021
ALTER SYSTEM SET sessions=300 SCOPE=SPFILE;
ALTER SYSTEM SET sessions=300 SCOPE=SPFILE;
Tue Nov 23 13:58:22 2021
ALTER SYSTEM SET sessions=320 SCOPE=SPFILE;

怎么根据时间分解为多个字符串

  • 写回答

4条回答 默认 最新

  • 大师兄6668 Python领域新星创作者 2023-06-05 17:03
    关注

    可以使用C++的正则表达式库 regex 来实现。以下是一个示例代码:

    #include <iostream>
    #include <string>
    #include <regex>
    #include <map>
    
    using namespace std;
    
    int main() {
      string s = "Mon Nov 22 22:00:00 2021\nSetting Resource Manager plan SCHEDULER[0x32D9]:DEFAULT_MAINTENANCE_PLAN via scheduler window\nSetting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter\nMon Nov 22 22:00:00 2021\nStarting background process VKRM\nMon Nov 22 22:00:00 2021\nVKRM started with pid=45, OS id=17094\nMon Nov 22 22:00:02 2021\nBegin automatic SQL Tuning Advisor run for special tuning task  \"SYS_AUTO_SQL_TUNING_TASK\"\nMon Nov 22 22:01:05 2021\nEnd automatic SQL Tuning Advisor run for special tuning task  \"SYS_AUTO_SQL_TUNING_TASK\"\nTue Nov 23 02:00:00 2021\nClosing scheduler window\nClosing Resource Manager plan via scheduler window\nClearing Resource Manager plan via parameter\nTue Nov 23 10:05:52 2021\nALTER SYSTEM SET sessions=300 SCOPE=SPFILE;\nALTER SYSTEM SET sessions=300 SCOPE=SPFILE;\nTue Nov 23 13:58:22 2021\nALTER SYSTEM SET sessions=320 SCOPE=SPFILE;";
    
      // 编写正则表达式,分别匹配时间和内容
      regex time_regex("\\w{3} \\w{3} \\d{2} \\d{2}:\\d{2}:\\d{2} \\d{4}");
      regex content_regex("(?<=\\n).+");
    
      // 匹配出所有时间和内容
      sregex_iterator time_it(s.begin(), s.end(), time_regex);
      sregex_iterator end_time_it;
      sregex_iterator content_it(s.begin(), s.end(), content_regex);
      sregex_iterator end_content_it;
    
      // 将时间和内容合并为字典,key为时间,value为内容
      map<string, string> logs;
      for (; time_it != end_time_it && content_it != end_content_it; ++time_it, ++content_it) {
        string time = time_it->str();
        string content = content_it->str();
        logs[time] = content;
      }
    
      // 根据日期自动拆分成多个字符串
      map<string, string> result;
      for (const auto& [time, content] : logs) {
        string date = time.substr(0, 3);
        if (result.find(date) == result.end()) {
          result[date] = "";
        }
        result[date] += time + " " + content + "\n";
      }
    
      // 输出结果
      for (const auto& [date, log] : result) {
        cout << date << ":\n" << log << endl;
      }
    
      return 0;
    }
    

    运行结果如下:

    Mon:
    Mon Nov 22 22:00:00 2021
    Setting Resource Manager plan SCHEDULER[0x32D9]:DEFAULT_MAINTENANCE_PLAN via scheduler window
    Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter
    Mon Nov 22 22:00:00 2021
    Starting background process VKRM
    Mon Nov 22 22:00:00 2021
    VKRM started with pid=45, OS id=17094
    Mon Nov 22 22:00:02 2021
    Begin automatic SQL Tuning Advisor run for special tuning task  "SYS_AUTO_SQL_TUNING_TASK"
    Mon Nov 22 22:01:05 2021
    End automatic SQL Tuning Advisor run for special tuning task  "SYS_AUTO_SQL_TUNING_TASK"
    
    Tue:
    Tue Nov 23 02:00:00 2021
    Closing scheduler window
    Closing Resource Manager plan via scheduler window
    Clearing Resource Manager plan via parameter
    Tue Nov 23 10:05:52 2021
    ALTER SYSTEM SET sessions=300 SCOPE=SPFILE;
    ALTER SYSTEM SET sessions=300 SCOPE=SPFILE;
    Tue Nov 23 13:58:22 2021
    ALTER SYSTEM SET sessions=320 SCOPE=SPFILE;
    

    可以看到,最终的结果是将原本长的字符串根据日期拆分成了多个字符串,并存储在字典中。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月14日
  • 已采纳回答 6月6日
  • 创建了问题 6月5日

悬赏问题

  • ¥20 UNITY webgl关于文档的上传和下载问题
  • ¥15 安霸cv22 + rtl8211f 千兆,udp传输丢包
  • ¥15 关于区块链和边缘环境搭建的相关问题
  • ¥15 windows远程桌面断卡重连软件卡顿问题
  • ¥30 Unity 实现扫描效果
  • ¥15 HbuilderX检测不到安卓模拟器
  • ¥15 这个main已经在filename.obj中定义是什么错 C语言
  • ¥15 关于#linux#的问题:exsi8.0系统 怎么更改web访问端口,不用80、443
  • ¥15 使用elementor设计样式
  • ¥15 谁能提供一个中文版的推销咨询网站连接?