解析和替换一些特定的部分
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++));
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 如何用转义符替换字符串中的所有特殊字符
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 在一个读写器队列中,我可以用volatile替换原子吗
- 用符号版本替换对函数的所有调用
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 替换基于地图的所有引用
- 按平均值替换数组中的元素
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 初始化 std::vector 替换为单大括号而不是双大括号
- 删除/替换C++字符串中的多字符 (ÿû)
- 将 malloc 替换为数组
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 如何在C++中用'\'替换''来处理转义序列?
- 替换密码:哪一个?
- 替换 C++17 中移除的绑定 1st
- 将 Boost MPL 容器替换为 C++17 功能
- C++:如何用单个命令替换复杂的迭代?
- C++ 替换字节数组中项的顺序