Qt-如何获得2个字符之间的字符串?

时间:2019-04-03 08:48:32

标签: regex qt

我正在使用字符串在Qt上工作。如何获得两个字符之间的字符串,即“#”和“:”

我的下面的字符串:

#id:131615165

#1:aaa,s1

#23:dd

#526:FE

我想要得到的结果是:“ id”,“ 1”,“ 23”,“ 526”。

非常感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

使用QRegularExpression的解决方案:

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

模式说明:

  • ^匹配行的开头
  • #字符
  • 匹配
  • (.+?)是一个捕获组,其中:
    • .匹配除行终止符之外的任何字符
    • +匹配一个或多个字符
    • ?是“惰性”匹配项,用于处理字符串中存在多个冒号的情况。
  • :字符
  • 匹配

答案 1 :(得分:1)

我强烈建议您使用在线正则表达式测试仪来开始使用正则表达式,例如:https://regex101.com

使用以下代码,您可以从QString捕获数据:

QString input = "#id:131615165";
QRegExp test("#(.*):");
if(test.exactMatch(input))
{
    qDebug() << "result:" << test.cap(1);
}

答案 2 :(得分:1)

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

答案 3 :(得分:0)

@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;
}