2016-04-14 15 views
0

ich QString zu analysieren versuchen:Wie aufzuspalten QString

34 t: 513 l: 21 o: 0x0147 [FBI] Verschiedenes Nr: 89f2aad996ae4a5c961a 123 532af2

QRegExp tagExp(":"); 
QStringList firstList = str.split(tagExp); 

Allerdings brauche ich nur " 9f2aad996ae4a5c961a 123 532af2 ". So ist es möglich, Rest Kette zu erhalten „:“

+0

Ich würde es wie 'str.split (" Nr.: ") Teilen;' und das zweite Element in der Liste nehmen. – vahancho

+2

Es hängt von den erwarteten Formaten der Zeilen ab, die Sie analysieren möchten. (z. B. gibt es immer ein ":", und ist der Text vor dem zufälligen Text oder hat er eine Struktur). Wenn es um das letzte ":" geht, würde ich nach lastIndexOf (":") und QString :: mid() gehen. –

Antwort

1

Wenn ich Sie richtig verstehe Sie das letzte Element der Liste soll (nach dem letzten „:“. Können Sie Folgendes tun ...

QRegExp tagExp(":"); 
QStringList firstList = str.split(tagExp); 
// Get the last string from list: 
// "34 t" 
// "513 l" 
// "21 o" 
// "0x0147 [FBI] Miscellaneous No. " 
// "89f2aad996ae4a5c961a 123 532af2" <<-- this is the last element in list 
QString requiredPart = firstList.takeLast(); 

die functino takeLast bekommt die letzte String und gibt ihn und entfernt sie auch aus der Liste Wenn Sie das letzte Element aus der Liste entfernen möchte nicht, dass Sie so etwas wie tun:.

QString requiredPart = firstList.value(firstList.length() - 1); 

oder

QString requiredPart = firstList.at(firstList.length() - 1); 

oder

QString requiredPart = firstList[firstList.length() - 1]; 

Aber die erste Option ist die sicherste, wie es Ihnen für „außerhalb der Grenzen“ Probleme besser abdeckt.

Sie können auch verwenden:

requiredPart = requiredPart.trimmed(); 

alle Leerzeichen am Anfang/Ende zu entfernen. Oder gehen Sie weiter und verwenden Sie:

Um überschüssigen Leerraum innerhalb der Zeichenfolge zu entfernen .. wahrscheinlich brauchen Sie dies nicht.