#regex #qt
#регулярное выражение #qt
Вопрос:
Я работаю над Qt, используя string. Как я могу получить строку из 2 символов ‘#’ и ‘:’
мои строки ниже:
#id:131615165
#1:aaa,s1
#23:dd
#526:FE
результат, который я хочу получить, это: «идентификатор», «1», «23», «526».
Большое спасибо за любую помощь.
Комментарии:
1. Есть поговорка, которая звучит примерно так: у программиста возникла проблема. Он решил решить это с помощью регулярных выражений. Теперь у программиста две проблемы. Регулярные выражения — это мощный инструмент в нужной ситуации, но также очень сложный и подверженный ошибкам. В вашем случае вы могли бы просто найти позицию
':'
, затем получить подстроку до этой позиции и пропустить первый символ (the'#'
). Это просто и легко писать и отлаживать.
Ответ №1:
Решение с использованием QRegularExpression
:
QRegularExpression regex("^#(. ?):");
qDebug() << regex.match("#id:131615165").captured(1);
Объяснение шаблона:
^
соответствует началу строки#
соответствует символу #(. ?)
является ли группа захвата, в которой:.
соответствует любому символу, кроме символов завершения строки?
это «ленивое» сопоставление для обработки ситуаций, когда в строке присутствует несколько двоеточий.
:
соответствует символу :
Комментарии:
1. почему вы публикуете дважды?… пожалуйста, в следующий раз рассмотрите возможность редактирования ответа вместо повторной публикации того же ответа….
Ответ №2:
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:
Я настоятельно рекомендую онлайн-тестер регулярных выражений, чтобы начать с регулярного выражения, например:https://regex101.com
Используя следующий код, вы можете записывать данные из QString:
QString input = "#id:131615165";
QRegExp test("#(.*):");
if(test.exactMatch(input))
{
qDebug() << "result:" << test.cap(1);
}
Комментарии:
1. Я пробовал, появляется предупреждение о неизвестной escape-последовательности ‘ #’
2. Извините за ошибку, сообщение было отредактировано путем удаления дополнительной косой черты (было ошибочно скопировано с regex101.com )
Ответ №4:
Как написал @Someprogrammerdude в комментариях:
QString getTag(QString const amp;input)
{
QString resu<
int idx = input.indexOf(':');
if(input.startsWith('#') amp;amp; idx > 1) {
int len = idx - 1;
result = input.mid(1, len); // [0]='#', [idx]=':'
}
return resu<
}