2016-05-01 20 views
1

Ich möchte alle Zeilen aus einem QString entfernen, die Text enthalten und diejenigen behalten, die Zahlen sind.QRegExp Zeile mit Text aus QString entfernen

Vor einem regexp mein QString ausgegeben werden, wie dies ausgeführt wird:

hello 

1 

world 

2 

wenn ich etwas laufe wie

QString.remove(QRegExp("(^[a-z]*\\n$)")) 

mein QString ausgegeben werden würde:

1 

2 
+0

was ist das Problem dann? gibt es einen Fehler, Regex funktioniert nicht? – rock321987

+0

Kann die richtige Regex nicht herausfinden. – bandito40

Antwort

1

Seit QRegExp hat keinen Perl-ähnlichen /m Modifikator, müssen Sie Gruppen wie verwenden e (^|\n) und ($|\n) stattdessen. Auch im Auge Zeilenumbrüchen tragen, können Zeilenumbrüche enthalten, würde ich so etwas wie

(^|\r?\n)[a-z]*\r?\n(\r?\n|$) 

Siehe regex demo

Qt verwenden:

QString t = "hello\n\n1\n\nworld\n\n2"; 
t.replace(QRegExp("(^|\r?\n)[a-z]*\r?\n(\r?\n|$)"), "\\1"); 

HINWEIS, dass dieser Code nur Linien entfernen Diese bestehen nur aus ASCII-Kleinbuchstaben und einem Zeilenumbruch nach ihnen. Wenn Sie nur alle Zeilen entfernen müssen, die nicht numerisch sind, verwenden Sie QRegExp("(^|\r?\n)[^\\d\n]+\r?\n(\r?\n|$)"). Dabei steht [^\d\n] für ein beliebiges Zeichen ohne Ziffern und nicht für einen Zeilenvorschub.

+0

Ich konnte Ihr Beispiel nicht für meine Bedürfnisse arbeiten lassen. Am Ende habe ich es einfach in eine QStringList konvertiert und Zeile für Zeile gemacht. Der einzige Grund, warum ich es mit einer Regexp machen wollte, war, einige Zeilen Code zu speichern. Danke für die Antwort. – bandito40

+0

Es ist immer schwierig, mit mehrzeiligen Problemen zu helfen, da es viele Nuancen gibt. Ich bin froh, dass Sie einen Weg gefunden haben, Ihr Problem zu lösen. –