正则表达式将精确单词与其前后的任意数量的空格进行匹配

时间:2013-11-14 02:52:13

标签: regex qregexp

我想在它之前和之后找到一个确切的单词“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*"));

1 个答案:

答案 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)。