Qt正则表达式在[]之间拆分字符串

时间:2016-11-17 02:53:14

标签: c++ regex qt

我想拆分字符串[A ] [B 1] [C 2] [D 254] [E 0]

加入[A ][B 1][C 2][D 254][E 0]

我已经在线测试了\[(.*?)\]这个表现正常,但我无法使用QRegExp拆分它。代码如下。

    QRegExp rx("\[(.*?)\]"); //RegEx for [----]
    QString str("[A ] [B 1] [C 2] [D 254] [E 0] ");
    QStringList query = str.split(rx);
    for( auto q : query ) {
        qDebug() << q;
    }

任何人都可以指出我犯错误的地方。谢谢。

2 个答案:

答案 0 :(得分:1)

正确拆分此字符串所需的是&#34;预测&#34; &#34; lookbehinds&#34;

QString s("[A ] [B 1] [C 2] [D 254] [E 0]");
QStringList sl = s.split(QRegularExpression("(?<=\\])[ ](?=\\[)"));

把它扔进qDebug() << sl;给了我这个:

enter image description here

让我们分解:

  • (?<=\\])(?<=PutTextHere)是一个&#34;肯定的后瞻&#34; ,它将查看其背后的字符串是否匹配,但不包括在匹配中本身。
  • [ ]这可能只是一个空白区域: - 我只是包含方括号以便于阅读。
  • (?=\\[)(?=PutTextHere)&#34;积极向前看&#34;
  • \\[你需要两个转义的原因是正则表达式需要一个转义符\,你的代码需要转义转义符。另一种选择是:
    QStringList sl = s.split(QRegularExpression("(?<="
                           + QRegularExpression::escape("]")
                           + ")[ ](?="
                           + QRegularExpression::escape("[")
                           + ")"));

答案 1 :(得分:0)

"\\[|\\] "可以拆分随附的[ITEM]