如何隔离 QString 中的整数

How to isolate an integer in a QString

我有一个 Gcode 的 QString,它看起来像这样:

T<some number> <and anything might come after it>

目前,我正在使用 myString.midRef(1,1).toInt() 来获取我想要的数字(我不关心该行的其余部分)。但是,如果有两位数,这将不起作用,例如:

T12 ;blah blah blah

除了按索引搜索以查看数字停止位置之外,还有更好/更好的方法吗?

使用正则表达式提取数字模式,例如

int ib, ie, n;
QStringRef num;
ib = str.indexOf(QRegExp("T\d+(\s*;{1}.|$)"));
if (ib >= 0) {
    ib++;
    ie = str.indexOf(";", ib);
    n = ie >= ib ? ie - ib : -1; 
    num = str.midRef(ib, n);
}

备注:

  1. T\d+ 匹配以 T 后跟一位或多位数字开头的模式。
  2. \s*;{1}.|$ 匹配零个或多个白色 space 后跟分号加上任何字符 OR 最后一个字符正好 none。

请注意,在上面的规则中,"T123 ""T123\n" 不会匹配模式。如果要允许白色 space,请使用以下内容:

QRegExp("T\d+\s*(;{1}.|$)")