我正在使用字符串在Qt上工作。如何获得两个字符之间的字符串,即“#”和“:”
我的下面的字符串:
#id:131615165
#1:aaa,s1
#23:dd
#526:FE
我想要得到的结果是:“ id”,“ 1”,“ 23”,“ 526”。
非常感谢您的帮助。
答案 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;
}