如何隔离QString中的整数

时间:2017-06-07 20:30:05

标签: qt g-code

我有一个Gcode的QString,如下所示:

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

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

T12 ;blah blah blah

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

  • 号码前面总会有T
  • 如果后面有任何其他文本,则数字后面总会有分号,但数字与分号之间可能没有空格。
  • 根据这个号码可能有也可能没有。

1 个答案:

答案 0 :(得分:2)

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

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}.|$匹配零个或多个空格后跟分号加上任何字符 OR 在最后一个字符中完全没有。
  3. 请注意,在上述规则中,"T123 ""T123\n"不符合该模式。如果要允许空格,请使用以下命令:

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