0

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

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

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

T12 ;blah blah blah

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

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

1 回答 1

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}.|$匹配零个或多个空格,后跟分号加上任何字符最后一个字符中没有。

请注意,在上述规则中,"T123 "否则"T123\n"将不匹配模式。如果要允许空格,请使用以下命令:

QRegExp("T\\d+\\s*(;{1}.|$)")
于 2017-06-07T22:55:21.103 回答