C++ QString拆分返回空字符串列表

C++ QString拆分返回空字符串列表,c++,regex,qt4,C++,Regex,Qt4,使用这个正则表达式B([^.]*)E我试图从中获取B和E之间的所有字符 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()

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

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;
QRegExp rx(“B([^.]*)E”);
rx.setMinimal(真);
QString str=“B23432 | 234 | 24EB23432 | 2834 | 234EB23432 | 2134 | 234E”;
QStringList表;
列表=str.split(rx);

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

QRegExp rx(“B([^E]*)E”);
rx.setMinimal(真);
QString str=“B23432 | 234 | 24EB23432 | 2834 | 234EB23432 | 2134 | 234E”;
QStringList表;
int pos=0;
而((位置=rx.indexIn(str,pos))!=-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;
QRegExp rx(“[B(.*)E]”;
rx.setMinimal(真);
QString str=“B23432 | 234 | 24EB23432 | 2834 | 234EB23432 | 2134 | 234E”;
QStringList表;
list=str.split(rx,QString::skipmptyparts);

qDebug()是否尝试获取B和第一个E之间的所有字符或行末尾的E?
[^.]
将不匹配任何字符。您可以尝试@stribizev建议的内容或
B(.*)E
。不,类似于
)(“23432|234 | 24”,“23432|2834 | 234”,“23432 | 2134 | 234”)
我认为应该归咎于代码,而不是表达式。在regex101.com上[这两个表达式的功能都与预期的一样只是事后考虑:也许,您可以使用,但结果数组中会有空元素。@Vlad我想我会利用这个机会来学习使用QBENCHMARK`结果是什么。test1是Stribizev的方法:
RESULT:TestBenchmark::test1():每次迭代0.0089毫秒(总数:73,迭代次数:8192)
结果:TestBenchmark::test2():每次迭代0.035毫秒(总数:73,迭代次数:2048)
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;