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=mstype=intmin=10max=1000increment=50
如果后续有新增的属性前缀,只需要在正则的非捕获组里添加对应的关键词就行,扩展性很强~
内容的提问来源于stack exchange,提问作者marcus
相关产品推荐
相关产品推荐

