Как разделить QString на основе заданной длины символа? - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь разделить QString на основе 19 символов на группу.

Вот строка:

+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, но не смог найти решение.

Как это сделать?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Решение

Я бы предложил вам использовать цикл вместо регулярного выражения.

Пример

Вот пример, который я подготовил для вас, как реализоватьэто в 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")
    
0 голосов
/ 14 сентября 2018

Используйте это регулярное выражение:

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

Я бы также рекомендовал использовать такой инструмент, как RegEx101 .Попробуйте и посмотрите, что произойдет.

enter image description here

...