在Qt中,用正则表达式捕获替换字符串匹配所需的代码最少?

In Qt, what takes the least amount of code to replace string matches with regular expression captures?

提问人:Anon 提问时间:11/12/2015 最后编辑:Alan MooreAnon 更新时间:11/12/2015 访问量:2957

问:

我希望QString允许这样做:

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));
    }
}

这似乎甚至不起作用,(实际上我放弃了)。一定有一种更简单、更方便的方法。为了简单性和代码可读性,我想知道使用最少代码行来实现此目的的方法。

谢谢。

正则表达式 qt qregularexpression

评论

2赞 thuga 11/12/2015
QString::replace(const QRegularExpression & re, const QString & after)。
0赞 Wiktor Stribiżew 11/13/2015
看起来你甚至放弃了在这里寻求帮助。
0赞 syockit 4/5/2019
@WiktorStribiżew QRegExp 不支持惰性量词,但新的 QRegularExpression 支持。
0赞 Wiktor Stribiżew 4/5/2019
@syockit我知道。QRegularExpression 基于 PCRE

答:

12赞 HeyYO 11/12/2015 #1
QString myString("School is LameCoolLame and LameRadLame");
myString.replace(QRegularExpression("Lame(.+?)Lame"),"\\1");

上面的代码按您的预期工作。在你的版本中,你忘记了转义角色本身。