Qt - Как получить строку между 2 символами? - PullRequest
0 голосов
/ 03 апреля 2019

Я работаю над Qt используя строку.Как я могу получить строку из 2 символов '#' и ':'

мои строки ниже:

#id:131615165

#1:aaa,s1

#23:dd

#526:FE

результат, который я хочу получить: "id", "1 "," 23 "," 526 ".

Большое спасибо за любую помощь.

Ответы [ 4 ]

2 голосов
/ 03 апреля 2019

Решение с использованием QRegularExpression:

QRegularExpression regex("^#(.+?):");
qDebug() << regex.match("#id:131615165").captured(1);

Объяснение модели:

  • ^ соответствует началу строки
  • # соответствует символу #
  • (.+?) - группа захвата, где:
    • . соответствует любому символу, кроме ограничителей строки
    • + соответствует одному или нескольким символам
    • ? - это «ленивое» совпадение для обработки ситуаций, когда в строке присутствует несколько двоеточий.
  • : соответствует символу :
1 голос
/ 03 апреля 2019

QString решение на основе:

QString s("    #iddfg:131615165");
int startPos = s.indexOf('#') + 1;
int endPos = s.indexOf(':');
int length = endPos - startPos;
qDebug() << startPos << length << s.mid(startPos, length);
1 голос
/ 03 апреля 2019

Я настоятельно рекомендую онлайн-тестирование регулярных выражений, чтобы начать с регулярного выражения, например: https://regex101.com

Используя следующий код, вы можете получить данные из строки QString:

QString input = "#id:131615165";
QRegExp test("#(.*):");
if(test.exactMatch(input))
{
    qDebug() << "result:" << test.cap(1);
}
0 голосов
/ 03 апреля 2019

Как @Someprogrammerdude написал в комментариях:

QString getTag(QString const &input)
{
    QString result;
    int idx = input.indexOf(':');
    if(input.startsWith('#') && idx > 1) {
        int len = idx - 1;
        result = input.mid(1, len); // [0]='#', [idx]=':'
    }
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...