Я надеялся, что QString позволит это:В Qt, что берет наименьшее количество кода для замены совпадений строк с регулярными выражениями?
QString myString("School is LameCoolLame and LameRadLame");
myString.replace(QRegularExpression("Lame(.+?)Lame"),"\1");
Оставляя
"School is Cool and Rad"
Вместо от того, что я видел в документации, делая это намного более запутанным требуя, чтобы сделать (из документации):
QRegularExpression re("\\d\\d \\w+");
QRegularExpressionMatch match = re.match("abc123 def");
if (match.hasMatch()) {
QString matched = match.captured(0); // matched == "23 def"
// ...
}
Или в моем случае что-то вроде этого:
QString myString("School is LameCoolLame and LameRadLame");
QRegularExpression re("Lame(.+?)Lame");
QRegularExpressionMatch match = re.match(myString);
if (match.hasMatch()) {
for (int i = 0; i < myString.count(re); i++) {
QString newString(match.captured(i));
myString.replace(myString.indexOf(re),re.pattern().size, match.captured(i));
}
}
И это даже не работает, (фактически я сдался). Должен быть более удобный способ. Для простоты и удобочитаемости кода я хотел бы знать методы, которые занимают наименьшие строки кода для этого.
Спасибо.
Существует ['QString :: replace (const QRegularExpression & re, const QString & after)'] (http://doc.qt.io/qt-5/qstring.html#replace-12). – thuga
Вам просто нужно заменить 'Lame' пустой строкой. Другая проблема заключается в том, что в Qt нет '. +?' Lazy quantifier, вам нужно использовать 're.setMinimal (true)'. Попробуйте 'QString myString (« School is LameCoolLame и LameRadLame »); QRegularExpression re ("Lame (. +) Lame"); re.setMinimal (истина); myString = myString.replace (re, "\\ 1"); '. –
Похоже, вы даже отказались от получения помощи здесь. –