【问题标题】:QString, Parse and replace some specific sectionsQString,解析和替换一些特定的部分
【发布时间】:2015-08-05 13:09:27
【问题描述】:

假设我有一个这样的字符串:

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

我想替换每个由两个 $ 括起来的部分将替换为 %0、%1 等等。 所以上面的例子是:“23+34-343+%0-3+%1”

我可以使用 QRegularExpression 和以下模式检测这些部分:“\$.+?\$”

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

【问题讨论】:

  • 请注意,我不能使用 QString::replace,因为要替换为 $x$ 的字符串不是常量。
  • 您可以使用QStringList list = str.split(QRegExp("\\$[^$]+\\$")); 拆分字符串,然后循环遍历项目并将它们与递增的数字连接起来。
  • 你也可以使用QString::section()

标签: c++ regex qt qstring


【解决方案1】:

这是怎么回事:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-01-03
      • 2020-09-23
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 2021-06-10
      • 1970-01-01
      • 2013-06-08
      相关资源
      最近更新 更多