我有这些网址字符串
文件:///home/we/Pictures/neededWord/3193_n.jpg
文件:///home/smes/Pictures/neededWord/jds_22.png
文件:///home/seede/kkske/Pictures/neededWord/3193_n.jpg
我想从每个中提取“neededWord”。从它们看来,图像的名称总是在“neededWord”之后,字符串中的变化部分在“neededWord”之前。我想到的方法是使用右边的“/”分隔符分割字符串,并在结果QstringList中取第二个元素。那么如何从右边分裂,还是有更好的方法呢?
答案 0 :(得分:34)
嗯,你只需要倒数第二个元素:
QStringList pieces = url.split( "/" );
QString neededWord = pieces.value( pieces.length() - 2 );
或者,您可以使用正则表达式。
答案 1 :(得分:0)
我这样解决了:
QStringList splitted = info.url().prettyUrl().split("/"); *header = splitted.at(splitted.findIndex(splitted.last()) - 1);
答案 2 :(得分:0)
或者类似的东西从我的头顶(未经测试):
QString neededWord = "";
QString str = "file:///home/seede/kkske/Pictures/neededWord/3193_n.jpg";
QRegExp rx(".*Pictures\\/(\\w+)\\/.*(?:jpg|png|gif|bmp|tiff)");
rx.setMinimal(false);
rx.setCaseSensitivity(Qt::CaseSensitive) // or use Qt::CaseInsensitive
if (rx.indexIn(str) != -1) {
neededWord = rx.cap(1);
}
“neededWord”应该在needWord QString中。 Regexp模式可以以更优雅的方式进行改进和编写,但我讨厌编写那些:)即使它们非常有用!
答案 3 :(得分:0)
我会将QString::lastIndexOf()
与QString::mid()
一起使用,以防止不必要的QString / QStringList创建和破坏:
// Example:
// 0 1 2 3 4 5
// 012345678901234567890123456789012345678901234567890
// "file:///home/we/Pictures/neededWord/3193_n.jpg"
QString neededWord;
int const lastSlash = url.lastIndexOf('/'); // := 35
int const prevSlash = url.lastIndexOf('/', -lastSlash - 1); // := 24
if(lastSlash > prevSlash + 1 && prevSlash >= 0) {
neededWord = url.mid(prevSlash, lastSlash - prevSlash - 1); // len := 10
}
根据您的需求,您可以使用QStringRef:
进一步优化此功能QStringRef neededWordRef(&url, prevSlash, lastSlash - prevSlash - 1);