QString拆分空字符串的返回列表

时间:2015-08-14 21:42:29

标签: c++ regex qt4

使用此正则表达式B([^.]*)E我试图从BE之间获取所有字符

B23432|234|24EB23432|2834|234EB23432|2134|234E

使用Qt4.8

QRegExp rx("B([^.]*)E");
rx.setMinimal(true);
QString str = "B23432|234|24EB23432|2834|234EB23432|2134|234E";
QStringList list;
list = str.split(rx);
qDebug() << list;

它打印一个空字符串列表。它不应该返回BE之间的所有字符串吗?

2 个答案:

答案 0 :(得分:1)

主要问题是您正在尝试拆分,但实际上您需要在循环中找到所有匹配并获取capturedTexts()[1] s(或cap(1) s)。

QRegExp rx("B([^E]*)E");
rx.setMinimal(true);
QString str = "B23432|234|24EB23432|2834|234EB23432|2134|234E";
QStringList list;
int pos = 0;

while ((pos = rx.indexIn(str, pos)) != -1) {
    list << rx.cap(1);
    pos += rx.matchedLength();
}
qDebug() << list;

答案 1 :(得分:1)

这也有效。如果有什么问题请告诉我。

QRegExp rx("[B(.*)E]");
rx.setMinimal(true);
QString str = "B23432|234|24EB23432|2834|234EB23432|2134|234E";
QStringList list;
list = str.split(rx, QString::SkipEmptyParts);
qDebug() << list;