确定字符串是否包含日期和时间

时间:2018-08-14 13:52:25

标签: c++

因此,我正在一个项目上,我发现了几个选项,但感觉好像没有一个合适的选择。

我有以下格式的跟踪文件:

2018-08-09  09:30:34.118    Info    0   ...
2018-08-09  09:30:34.125    SystemInfo  0   ...

不同的跟踪文件应该是可比较的,因此需要删除日期和时间。

到目前为止,我的程序如下:

#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <fstream>
#include <string>
#include <iostream>
#include <ctime>
using namespace std;

void main(string filename)
{
ifstream in(filename);
ofstream out;
string line, sub_line;


if (in.is_open())
{
    out.open("stripped_" + filename);
    while (getline(in, line))
    {
        if (in.good())
        {
            if ()
            sub_line = line.substr(26);
            out << sub_line;

            in.close();
            out.close();
        }
    }
}

else
{
    cout << "File cannot be opened..." << endl;
}
}

我不知道如何检查这种格式,我会很感激任何形式的帮助或建议。

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式(regex)查找字符串中的模式。 这是在C ++中使用正则表达式的方法:

#include <regex>
#include <string>
#include <iostream>

using namespace std;

int main()
{
    string strs[] = { "2018-08-09 09:30:34.118", "Foo", "Hello" };
    regex reg(R"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3})");

    for (auto & i : strs)
    {
        smatch m;
        if (regex_search(i, m, reg))
            cout << "Correct!" << endl;
        else
            cout << "Not correct" << endl;
    }
    return 0;
}

\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3})表示类似于2018-08-09 09:30:34.118的字符串格式。您可以使用std::regex_search来判断字符串是否遵循格式。