我想在它之前和之后找到一个确切的单词“SUBRECORD”,其中包含任意数量的空格。我试过了:
\s*SUBRECORD\s*
[ ]*SUBRECORD[ ]*
(\s)*SUBRECORD(\s)*
但它们都不起作用。
编辑:
这是不起作用的代码片段:
QStringList list;
list.append("RECORD \"DEFSTA\" \"Definition des Stations\"");
list.append(" STRING (2) \"Version\";");
list.append(" SUBRECORD (2) \"Nb de Stations\";");
list.append(" STRING (30) \"Nom de la Station\"; ");
list.append(" INTEGER (2) \"Numero de la Station\";");
list.append(" INTEGER (4) \"Extra charge\";");
list.append(" STRING (5) \"Mnemonique Station\";");
list.append(" DUMMY (1) \"Réserve\";");
list.append(" ENDSUBRECORD;");
list.append(" SIGNATURE \"Signature\" ; ");
list.append("ENDRECORD;");
qDebug() << "LAST INDEX OF SUBRECORD:" << list.lastIndexOf(QRegExp("\\s*SUBRECORD\\s*"));
答案 0 :(得分:2)
<强>原因:强>
lastIndexOf(...)
仅在整行完全匹配时才返回索引。这来自Qt文档:
int QStringList::lastIndexOf ( const QRegExp & rx, int from = -1 ) const
返回列表中rx的最后完全匹配的索引位置,从索引位置向后搜索。如果from为-1(默认值),则搜索从最后一项开始。如果没有匹配项,则返回-1。
由于\s*SUBRECORD\s*
与该行完全不匹配,因此不会将其视为匹配。
<强>解决方案:强>
而是尝试:.*\\s+SUBRECORD\\s+.*
额外.*
匹配开头和结尾的任何额外内容。
\s+
确保至少有一个空格(感谢@TV) - 另外,额外的\
是在输入QString时转义反斜杠(感谢@MoKi)。