如何隔离 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
除了按索引搜索以查看数字停止位置之外,还有更好/更好的方法吗?
- 号码前总会有一个
T
。
- 如果数字后面有任何其他文本,数字后面总会有一个分号,但数字和分号之间可能没有 space。
- 数字后面可能有也可能没有任何东西。
使用正则表达式提取数字模式,例如
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);
}
备注:
T\d+
匹配以 T
后跟一位或多位数字开头的模式。
\s*;{1}.|$
匹配零个或多个白色 space 后跟分号加上任何字符 OR 最后一个字符正好 none。
请注意,在上面的规则中,"T123 "
或 "T123\n"
不会匹配模式。如果要允许白色 space,请使用以下内容:
QRegExp("T\d+\s*(;{1}.|$)")
我有一个 Gcode 的 QString,它看起来像这样:
T<some number> <and anything might come after it>
目前,我正在使用 myString.midRef(1,1).toInt()
来获取我想要的数字(我不关心该行的其余部分)。但是,如果有两位数,这将不起作用,例如:
T12 ;blah blah blah
除了按索引搜索以查看数字停止位置之外,还有更好/更好的方法吗?
- 号码前总会有一个
T
。 - 如果数字后面有任何其他文本,数字后面总会有一个分号,但数字和分号之间可能没有 space。
- 数字后面可能有也可能没有任何东西。
使用正则表达式提取数字模式,例如
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);
}
备注:
T\d+
匹配以T
后跟一位或多位数字开头的模式。\s*;{1}.|$
匹配零个或多个白色 space 后跟分号加上任何字符 OR 最后一个字符正好 none。
请注意,在上面的规则中,"T123 "
或 "T123\n"
不会匹配模式。如果要允许白色 space,请使用以下内容:
QRegExp("T\d+\s*(;{1}.|$)")