You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt中能否用QString::split()结合正则分割指定键值对字符串?

使用QString::split()结合正则表达式分割目标字符串的解决方案

当然可以实现这个需求!关键在于找对正确的分割点——不能直接按空格分割,因为displayName的值里包含空格和方括号,会被误拆。咱们用正则表达式精准定位那些用来分割属性的空格就行。

核心思路

我们要匹配的是后面紧跟着unit=/type=/min=/max=/increment=这些属性前缀的空格,这样就能避开displayName值里的空格。用正则的正向预查就能完美实现这个逻辑。

代码实现

直接上可运行的Qt代码:

#include <QString>
#include <QDebug>

int main() {
    QString inputStr = "displayName=Exposure Time [µs] unit=ms type=int min=10 max=1000 increment=50";
    // 正则表达式:匹配后面跟着指定属性前缀的空格
    QRegularExpression splitRegex(R"( (?=\b(?:unit|type|min|max|increment)=))");
    QStringList splitResult = inputStr.split(splitRegex);

    // 打印验证结果
    for (const QString& item : splitResult) {
        qDebug() << item;
    }
    return 0;
}

正则表达式解释

咱们拆解一下这个正则(?=\b(?:unit|type|min|max|increment)=):

  • (?=...):正向预查,只匹配符合条件的位置,不会消耗任何字符(简单说就是“看后面是不是符合要求,符合的话就把当前位置作为分割点”)
  • \b:单词边界,确保我们匹配的是完整的属性前缀,避免误匹配类似xunit=这种情况
  • (?:unit|type|min|max|increment):非捕获组,列出所有需要识别的属性前缀,避免重复写逻辑
  • 前面的空格:就是我们要用来分割的那个空格

运行结果

执行后会得到你想要的分割结果:

  • displayName=Exposure Time [µs]
  • unit=ms
  • type=int
  • min=10
  • max=1000
  • increment=50

如果后续有新增的属性前缀,只需要在正则的非捕获组里添加对应的关键词就行,扩展性很强~

内容的提问来源于stack exchange,提问作者marcus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:10:20