QRegExp получает дублирование в результате отладки

Мой код:

QString strExp="Sum(2+3)-Sum(5+3)";

QRegExp regexp("(Sum\\([^)]*\\))");
regexp.indexIn(strExp);

QStringList lst=regexp.capturedTexts();
qDebug()<<"CapturedCounts:"<<regexp.captureCount();

qDebug()<<lst;

У меня есть количество захваченных данных, равное 1, и вывод отладки списка qstring, как показано ниже.

("Sum(2+3)", "Sum(2+3)").

Почему?


person mukthar ali    schedule 12.10.2016    source источник


Ответы (1)


Первый элемент списка QRegExp::capturedTexts() — это вся совпавшая строка.

Документ говорит:

QStringList QRegExp::capturedTexts() const

Возвращает список захваченных текстовых строк.

Первая строка в списке — это вся совпавшая строка. Каждый последующий элемент списка содержит строку, совпадающую с (захваченным) подвыражением регулярного выражения.

Другой пример:

QString s = "abcd123";
QRegExp re("(ab).*(12)");

qDebug() << "indexIn:" << re.indexIn(s);
qDebug() << "captureCount:" << re.captureCount();
qDebug() << "capturedTexts:" << re.capturedTexts();

Вывод будет:

indexIn: 0 
captureCount: 2 
capturedTexts: ("abcd12", "ab", "12") 

Если вы хотите получить все совпадения, вы можете использовать это:

QString strExp="Sum(2+3)-Sum(5+3)";

QRegExp regexp("(Sum\\([^)]*\\))");
regexp.indexIn(strExp);

QStringList list;
int pos = 0;

while ((pos = regexp.indexIn(strExp, pos)) != -1) {
    list << regexp.cap(1);
    pos += regexp.matchedLength();
}

qDebug() << "all matches:" << list;

Выход:

all matches: ("Sum(2+3)", "Sum(5+3)") 
person hank    schedule 12.10.2016
comment
в моем примере, как можно извлечь эти типы в Qt - person mukthar ali; 12.10.2016
comment
*эти типы выражений - person mukthar ali; 12.10.2016
comment
Я не понимаю вашего вопроса. - person hank; 12.10.2016
comment
Как может parseQString strExp=Sum(2+3)-Sum(5+3); QRegExp регулярное выражение((Сумма\([^)]*\))) - person mukthar ali; 12.10.2016
comment
Извините за непонимание вопросов. Мне нужно знать о классе qt для синтаксического анализа арифметического выражения, такого как a*(b+c) и sum(a+b) - person mukthar ali; 13.10.2016
comment
В Qt такого класса нет. - person hank; 13.10.2016
comment
есть ли способ без цикла. - person mukthar ali; 14.10.2016