QRegExp invertieren

Verschiedenes zu Qt
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

QRegExp invertieren

Beitrag von BartSimpson »

Hallo, ich habe diesen Ausruck :QRegExp("d4.dll$"), nur soll er sich genau anders rum verhalten.(Alles liefern was nicht dem entspricht)
Hat jemand eine Idee?

"!d4.dll$" "d4.dll!$" oder "!(d4.dll$)" geht leider nicht:(
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Da haben sich schon ganz andere die Zähne dran ausgebissen :-) Du Du es aber am Ende des Strings suchst, kannst Du es auch mit einem Vergleich macht.
if (myString.right(6).toLower() != "d4.dll")
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

nein leider nicht, da QRegExp für eine QStringList gebraucht wird.
Genauer gesagt: QStringList.filter()
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Dann schreib dir deine eigene Filterroutine, ist doch schnell gemacht. Und da du genau weißt was Du vergleichen musst, ist es wahrscheinlich sogar schneller, als wenn Du RegExp darauf los lässt. Ist allerdings nicht so flexibel.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Probier mal

Code: Alles auswählen

(?!d4.dll)$
Kanns aber gerade nicht testen...
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Nee geht leider nicht, alle Dateien die mit d4.dll enden sind trotzdem enthalten.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Liess mir jetzt doch keine Ruhe :-) Hiermit sollte es gehen, zumindest verliefen Tests mit EditPad Pro positiv.

Code: Alles auswählen

^.*[^(d4\.dll$)]$
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Nee geht leider auch nicht.
weder "^.*[^(d4\\.dll$)]$" noch "^.*[^(d4\.dll$)]$"
Hier mal noch mehr Infos.
Das steht in der Stringliste:

Code: Alles auswählen

("qsa1.dll", "qsad1.dll", "Qt3Support4.dll", "Qt3Supportd4.dll", "QtAssistantClient4.dll", "QtAssist
antClientd4.dll", "QtCore4.dll", "QtCored4.dll", "QtDesigner4.dll", "QtDesignerComponents4.dll", "Qt
DesignerComponentsd4.dll", "QtDesignerd4.dll", "QtGui4.dll", "QtGuid4.dll", "QtNetwork4.dll", "QtNet
workd4.dll", "QtOpenGL4.dll", "QtOpenGLd4.dll", "QtSql4.dll", "QtSqld4.dll", "QtSvg4.dll", "QtSvgd4.
dll", "QtTest4.dll", "QtTestd4.dll", "QtXml4.dll", "QtXmld4.dll")
und alle Debug Bibliotheken sollen raus.(enden ja auf d4.dll)
Also kurzerhand Liste=Liste.filter()
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Dann eben auf die harte Tour:

aus der QList ein QSet machen. Auf d4.dll vorhanden filtern und von QSet abziehen. Dann kannst du ja wieder eine QList daraus machen...

Aber ich glaube eine foreach-Schleife wäre kürzer einfacher und schneller...
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Ich weiß, aber genau das wollte ich eigentlich nicht.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Ich hätte mir schon längst sowas gebastelt:

Code: Alles auswählen

	// sl ist die StringList mit den ganzen DLLs
	QStringList::iterator it = sl.begin();
	while (it != sl.end())
	{
		if ((*it).indexOf(QRegExp("d4\\.dll$")) > -1)
			it = sl.erase(it);
		else
			++it;
	}
Sogar mit RegExp, wenn es denn unbedingt sein muss :-) Ohne wäre es wohl noch schneller.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Wenn du alles, was auf "d4.dll" endet löschen willst, warum verwendest du nicht

Code: Alles auswählen

bool QString::endsWith ( const QString & s, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
Geht sicher schneller als die Auswertung einer QRegExp :)

Grüße
Franz
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

und was soll das??
Das liefert keine Liste sondern bool.
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Filtern mit RegExp [gelöst]

Beitrag von neuschi »

Sucht ihr sowas hier?

Code: Alles auswählen

QRegExp rx (".*([^d][^4]|[^d].|.[^4])\.dll");
	
QStringList filtered = dlls.filter(rx);
\Ralf
Zuletzt geändert von neuschi am 23. Mai 2007 11:28, insgesamt 1-mal geändert.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

genau das ist es:)
".*([^d][^4]|[^d].|.[^4])\\.dll"
Antworten