解析和替换一些特定的部分

QString, Parse and replace some specific sections

本文关键字:替换      更新时间:2023-10-16

假设有这样一个字符串:

QString str = "23+34-343+$T$-3+$OPC$";

我想替换所有被两个$包围的部分,它们将被替换为%0,%1等等。所以上面的例子是:"23+34-343+%0-3+%1"

我可以通过使用qregulareexpression和以下模式来检测节:"$.+?美元 "

用%0,%1,%2等替换这些部分的最佳和最优化的方法(不使用循环和索引)是什么

这是怎么回事:

QString str = "23+34-343+$T$-3+$OPC$";
QRegExp rx;
rx.setMinimal(true);
rx.setPattern("\$.+\$");
str.replace(rx, "X");           //First replace every pattern with something like 'X'
for(int i=0 ;str.indexOf("X")!=-1; i++)
    str.replace(str.indexOf("X"), 1,"%"+QString::number(i));

我真的不明白为什么你不想使用循环。我认为这对你的情况是非常有效的方法。

我写了一些例子,但不声称是最佳解决方案的作者:

QString str = "23+34-343+$T$-3+$OPC$";
int pos = 0, nextPos = 0, iterationNumber = 0;
while ((pos = str.indexOf("$")) > 0 && (nextPos = str.indexOf("$", pos + 1)) > 0)
    str.replace(pos, nextPos - pos + 1, "%" + QString::number(iterationNumber++));