Qt 正则表达式提取文件中的 USB 设备 ID

时间:2024-11-13 14:58:04

Qt 正则表达式提取文件中的 USB 设备 ID

flyfish

文档内容

Bus: 001 Device: 001 Description: 1d6b:0002 Linux Foundation 2.0 root hub
Bus: 002 Device: 003 Description: 0e0f:0002 , Inc. USB Hub
Bus: 002 Device: 002 Description: 0e0f:0003 , Inc. Mouse
Bus: 002 Device: 001 Description: 1d6b:0001 Linux Foundation 1.1 root hub

代码

#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QStringList>
#include <QRegularExpression>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 默认文件路径
    QString defaultFilePath = "./usb_devices.txt";

    // 从命令行参数中获取文件路径
    QString filePath = (argc > 1) ? QString::fromLocal8Bit(argv[1]) : defaultFilePath;

    // 打开文件
    QFile file(filePath);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qCritical() << "无法打开文件:" << filePath;
        return 1;
    }

    // 读取文件内容
    QTextStream in(&file);
    QString content = in.readAll();
    file.close();

    // 使用正则表达式匹配 USB 设备的 ID
    QRegularExpression regex("Description:\\s*([0-9a-fA-F]{4}:[0-9a-fA-F]{4})");
    QRegularExpressionMatchIterator i = regex.globalMatch(content);

    while (i.hasNext()) {
        QRegularExpressionMatch match = i.next();
        QString id = match.captured(1);
        qDebug() << "USB 设备 ID:" << id;
    }

    return 0;
}

结果

USB 设备 ID: "1d6b:0002"
USB 设备 ID: "0e0f:0002"
USB 设备 ID: "0e0f:0003"
USB 设备 ID: "1d6b:0001"