1

我想找到一个精确的单词“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*"));
4

1 回答 1

2

原因:

lastIndexOf(...)仅当整行完全匹配时才返回索引。这是来自 Qt 文档:

int QStringList::lastIndexOf ( const QRegExp & rx, int from = -1 ) const

返回列表中 rx 的最后一个精确匹配的索引位置,从索引位置向后搜索。如果 from 为 -1(默认值),则搜索从最后一项开始。如果没有匹配的项目,则返回 -1。

因为\s*SUBRECORD\s*不完全匹配该行,所以它不会算作匹配。


解决方案:

而是尝试:.*\\s+SUBRECORD\\s+.*

extra.*匹配开头和结尾的任何额外内容。

\s+确保至少有一个空格(感谢@TV)-另外,当作为 QString 输入时,额外的\是转义反斜杠(感谢@MoKi)。

于 2013-11-14T03:23:43.340 回答