Suche und Ersetzen mit regulären Ausdruck in Notepad++

Mr. Brooks

Lt. Commander
Registriert
Aug. 2011
Beiträge
1.441
Hallo,

ich lasse mir am PC von XBMC NFO-Dateien von Serien erstellen und verschieben diese dann auf meinen HTPC. Da ich die ganzen User-Ratings nicht mag schmeiß ich die vorher raus. Dazu nutze ich unter Windows 7 Notepad++. Die Rating sehen in der NFO in etwa so aus:

Code:
<rating>9.900000</rating>

Ich nehme Notepad++ gehe auf "Ersetzen" -> "in Dateien suchen" und wähle den Ordner mit den NFO aus. Dann bei
Suche nach: <rating>[0-9].[0-9]+</rating> und
Ersetzen durch: /n oder Feld komplett leer lassen

Letztlich soll die Zeile gelöscht werden und es soll keine leere Zeile zurück bleiben. Manchmal geht es nur wenn ich bei Ersetzen durch "/n" eingebe, manchmal wenn ich es leer lasse. Jetzt macht er plötzlich 2 Leerzeichen rein wenn ich "/n" einsetze. Das ist mir zu hoch. Was muss dort rein, damit immer die Zeile komplett und ersatzlos gelöscht wird?

Mr. Brooks
 
Bei ein und der selben Datei oder, bei einer Masse von Dateien, bei einigen?
 
Das wird auf alle NFO im Ordner inkl. der Unterordner durchgeführt die diesen Ausdruck haben. Gefunden werden alle, nur werden die mal so udn mal so korrigiert. Es werden aber immer alle Dateien gleich geändert. Mal so mal so heißt heute so, morgen anders, nicht Datei 1 so udn Datei 2 anders.
 
sauberer:
Code:
<rating>[0-9]\.[0-9]+?</rating>

es ist nicht /n, sondern \n
und in der Hinsicht ist notepad++ nicht sehr gut, da es die Suchmuster (bis auf spezielle Ausnamen) Zeilenweise abarbeitet

dazu kommt noch das "Problem", das unter Windows ein Zeilenumbruch nicht nur aus einem Linefeed besteht (\n) sondern zusätzlich noch einem Carriage Return (\r) -> \r\n
je nach dem, unter welchen Betriebssystem die Datei erstellt wurde, weicht das ab

Und in einem XML ist es ziemlich wurst, ob eine Leerzeile drin steht oder nicht...
 
Hab auch \n verwendet, war ein Tippfehler.

Es geht aber auch mit \r\n nicht. Wieder werden 2 Leerzeilen erstellt.

Die Daten wurden alle unter Windows 7 erstellt und geändert.

Das mit den Leerzeilen ist schon ein Problem, da nicht alle Scraper damit zurecht kommen.
 
Wenn du deinen Ausdruck durch einen Line Feed ersetzt, ist ja auch logisch, dass eine neue Zeile hinzukommt. Stattdessen solltest du vielleicht den Zeilenumbruch nach dem Ausdruck (also Carriage Return + Line Feed) mitersetzen.
Quasi so
Code:
<rating>[0-9]\.[0-9]+?</rating>[\r][\n]
ersetzen durch Nichts.

Klappt ab Notepadd++ 6.0.

PS: In Notepad kannst du dir auch die nicht druckbaren Zeichen anzeigen lassen.
 
Zuletzt bearbeitet:
du kannst probieren, erst alle

Code:
<rating>[0-9]\.[0-9]+?</rating>
mit
<rating></rating>
zu ersetzen (Suchmodus "reguläre ausdrücke")

anschließend
Code:
<rating></rating>\r\n
mit
(nix)
im Suchmodus "erweitert" (der ist robuster und arbeitet auch über mehrere Zeilen) den Rest loswerden
 
Wenn das mal so oder so korrigiert wird, dann muß Du schauen, wo die Unterschiede sind. Eventuell werden Whitespaces geschrieben, die Du mit \s rausholen kannst (wenn das bei notepad+ funktioniert):

Code:
<rating>\s*[0-9].[0-9]+\s*</rating>

normalerweise muß der Ersetzenstring leer sein
 
hi, dann ist das möglicherweise kein Windowszeilenumbruch. Da hilft jetzt nur, sich die Datei mal anschauen. Zeig mit Notepad++ alle nicht druckbaren Zeichen an, dann siehst du auch, welche Zeichen für den Zeilenumbruch verwendet werden und kannst die ersetzen. CR ist \r, LF ist \n. Siehe auch bei Wikipedia.

Und das funktioniert wie gesagt erst mit neueren Notepad++ Versionen.

Edit: Du kannst auch einfach \R (statt [\r][\n])verwenden, das sollte die verschiedenen Zeilenumbrüche finden.
 
Zuletzt bearbeitet:
Zurück
Oben