2012-08-01 25 views
15

tengo estas cadenas URLQString División

archivo: ///home/we/Pictures/neededWord/3193_n.jpg archivo

: ///home/smes/Pictures/neededWord/jds_22.png

archivo: ///home/seede/kkske/Pictures/neededWord/3193_n.jpg

Quiero extraer el "neededWord" de cada uno de ellos. Como aparece de ellos, el nombre de la imagen siempre está después de la "palabra necesitada" y la parte que cambia en la cadena está antes de la "palabra necesitada". La forma en que pensé es dividir la cadena usando el separador "/" desde la derecha y tomar el segundo elemento en la QstringList resultante. Entonces, ¿cómo dividir desde la derecha, o hay una mejor manera de hacerlo?

Respuesta

29

Bueno usted acaba de tomar el segundo al último elemento:

QStringList pieces = url.split("/"); 
QString neededWord = pieces.value(pieces.length() - 2); 

Como alternativa, se puede usar una expresión regular.

0

i fijo de esta manera:

QStringList splitted = info.url().prettyUrl().split("/"); 
*header = splitted.at(splitted.findIndex(splitted.last()) - 1); 
+1

¿Por qué necesita buscar el último artículo? Ya sabes lo que es el índice, de la misma manera que sabes que el primer elemento está en el índice 0. Esta es una forma ** muy ** extraña de hacer algo tan simple. – Chris

0

O algo así desde la parte superior de la cabeza (no probado):

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" debe estar en neededWord QString. El patrón Regexp se puede refinar y escribir de una manera más elegante, pero odio escribir esos :) ¡incluso si son súper útiles!

+0

Está tratando de capturar el texto que está en el lugar de "neededWord", no el nombre real de la imagen. – Chris

+0

Vaya, mi mal entonces :) lo arregló. Debería leer más cuidado! Gracias. – sadjoker