如何根据给定的字符长度拆分 QString?

How to split QString based on a given character length?

我正在尝试根据每组 19 个字符拆分 QString

这是字符串:

+1.838212011719E+04-1.779050827026E+00 3.725290298462E-09 0.000000000000E+00

我想把它分成:

+1.838212011719E+04
-1.779050827026E+00
3.725290298462E-09
0.000000000000E+00

我已经尝试使用 QRegularExpression,但我无法想出解决方案。

如何操作?

使用这个正则表达式:

^(.{19})(.{19})(.{19})(.{19})

我还建议使用 RegEx101 这样的工具。试一试,看看会发生什么。

解决方案

我建议您使用循环而不是正则表达式。

例子

这是我为您准备的如何在 C++ 中实现的示例:

bool splitString(const QString &str, int n, QStringList &list)
{
    if (n < 1)
        return false;

    QString tmp(str);

    list.clear();

    while (!tmp.isEmpty()) {
        list.append(tmp.left(n));
        tmp.remove(0, n);
    }

    return true;
}

注意: 您可以选择使用 QString::trimmed(),即 list.append(tmp.left(n).trimmed());,以去除前导空格。

结果

正在使用您的输入测试示例:

QStringList list;

if (splitString("+1.838212011719E+04-1.779050827026E+00 3.725290298462E-09 0.000000000000E+00", 19, list))
    qDebug() << list;

产生以下结果:

  • 没有QString::trimmed()

      ("+1.838212011719E+04", "-1.779050827026E+00", " 3.725290298462E-09", " 0.000000000000E+00")
    
  • QString::trimmed()

      ("+1.838212011719E+04", "-1.779050827026E+00", "3.725290298462E-09", "0.000000000000E+00")