MUT: RegEx Lösche unterschiedliche Zeichen am Ende
Moderators: Hacker, Stefan2, white
MUT: RegEx Lösche unterschiedliche Zeichen am Ende
Hallo,
ich hab mich in den regulären Ausdrücken verheddert und bräuchte mal Eure Unterstützung. Ich habe von Flickr Fotos runtergeladen, um korrupte lokale Kopien zu ersetzen. Flickr hängt an jeden Originaldateinamen
_irgendwelcheZiffern_o an.
So wird z.B. aus
sa310038.jpg
nach der Up- und Download bei Flicker
sa310038_22601314110_o.jpg
Wie kann ich die ursprünglichen Dateinamen wieder herstellen?
ich hab mich in den regulären Ausdrücken verheddert und bräuchte mal Eure Unterstützung. Ich habe von Flickr Fotos runtergeladen, um korrupte lokale Kopien zu ersetzen. Flickr hängt an jeden Originaldateinamen
_irgendwelcheZiffern_o an.
So wird z.B. aus
sa310038.jpg
nach der Up- und Download bei Flicker
sa310038_22601314110_o.jpg
Wie kann ich die ursprünglichen Dateinamen wieder herstellen?
Grüße
praetor
praetor
Wenn im ursprünglichen Namen kein Unterstrich vorkommt, wäre folgendes eine Möglichkeit:
Suchen nach
([^_]+)_.*(\.[^\.]+)$
Ersetzen durch
$1$2
[x]RegEx
Wenn doch, dann müsste man wissen, ob die angehängte Zeichenkette immer die selbe Länge hat. Dann könnte man den Ausdruck auch wesentlich vereinfachen.
Update:
Wenn es tatsächlich nur Ziffern sind die angehängt werden, dann kann man es sich einfacher machen, und der Dateiname alle beliebigen Zeichen haben:
Suchen nach
(.+)_\d+_o(\.[^\.]+)$
Ersetzen durch
$1$2
[x]RegEx
Suchen nach
([^_]+)_.*(\.[^\.]+)$
Ersetzen durch
$1$2
[x]RegEx
Wenn doch, dann müsste man wissen, ob die angehängte Zeichenkette immer die selbe Länge hat. Dann könnte man den Ausdruck auch wesentlich vereinfachen.
Update:
Wenn es tatsächlich nur Ziffern sind die angehängt werden, dann kann man es sich einfacher machen, und der Dateiname alle beliebigen Zeichen haben:
Suchen nach
(.+)_\d+_o(\.[^\.]+)$
Ersetzen durch
$1$2
[x]RegEx
TC plugins: PCREsearch and RegXtract
Vielen Dank zunächst mal!
M.E. müsste vom Ende des Dateinamens beginnend die Position des zweiten Unterstrichs ermittelt werden, um dann alles bis zu dieser Position abzuschneiden. Lässt sich das machen?
Doch, kommt z.T. vor. Die ursprünglichen Namen lauten ganz unterschiedlich.milo1012 wrote:Wenn im ursprünglichen Namen kein Unterstrich vorkommt ...
Das ist leider auch nicht gewährleistet.milo1012 wrote: dann müsste man wissen, ob die angehängte Zeichenkette immer die selbe Länge hat.
Auch das ist leider nicht der Fall. Der angehängte String endet mit einem kleinen o.milo1012 wrote: Wenn es tatsächlich nur Ziffern sind die angehängt werden, ...
M.E. müsste vom Ende des Dateinamens beginnend die Position des zweiten Unterstrichs ermittelt werden, um dann alles bis zu dieser Position abzuschneiden. Lässt sich das machen?
Grüße
praetor
praetor
MUT: RegEx letzte zwei Unterstriche abschneiden
Gute Fragestellung, praetor, inklusive Vorher/Nachher-Beispiele :thumpsup:
VON:
sa310038_22601314110_o.jpg
sa_310_038_22601314110_o.jpg
sa_310_038_TEST_Datei_22601314110_o.jpg
ZU:
sa310038.jpg
sa_310_038.jpg
sa_310_038_TEST_Datei.jpg
Probiere es mal so:
Suche: (.+)_.+_.
Ersetze: $1
[X]RegEx
Erklärung:
(.+) >> suche gierig alles, bis
_.+_. >>[face=timesnewroman] zu einem Unterstrich, gefolgt von beliebig vielen Zeichen, gefolgt von einem Unterstrich, gefolgt von einem beliebigen Zeichen (hier dem 'o')[/face]
EDIT:
Es wundert mich schon, dass das zweite '.+' keine Unterstriche findet/berücksichtigt.
Aber das greedy des ersten '.+' ist wohl stärker.
Richtiger (und vermutlich schneller bei tausenden Dateien) wäre jedoch wohl trotdem : '(.+)_[^_]+_.'
VON:
sa310038_22601314110_o.jpg
sa_310_038_22601314110_o.jpg
sa_310_038_TEST_Datei_22601314110_o.jpg
ZU:
sa310038.jpg
sa_310_038.jpg
sa_310_038_TEST_Datei.jpg
praetor wrote:M.E. müsste vom Ende des Dateinamens beginnend die Position des zweiten Unterstrichs ermittelt werden, um dann alles bis zu dieser Position abzuschneiden. Lässt sich das machen?
Probiere es mal so:
Suche: (.+)_.+_.
Ersetze: $1
[X]RegEx
Erklärung:
(.+) >> suche gierig alles, bis
_.+_. >>[face=timesnewroman] zu einem Unterstrich, gefolgt von beliebig vielen Zeichen, gefolgt von einem Unterstrich, gefolgt von einem beliebigen Zeichen (hier dem 'o')[/face]
EDIT:
Es wundert mich schon, dass das zweite '.+' keine Unterstriche findet/berücksichtigt.
Aber das greedy des ersten '.+' ist wohl stärker.
Richtiger (und vermutlich schneller bei tausenden Dateien) wäre jedoch wohl trotdem : '(.+)_[^_]+_.'
Last edited by Stefan2 on 2016-06-21, 12:22 UTC, edited 1 time in total.
Re: MUT: RegEx letzte zwei Unterstriche abschneiden
Danke Stefan, funktioniert primaStefan2 wrote:Suche: (.+)_.+_.
Ersetze: $1
[X]RegEx

Grüße
praetor
praetor
Re: MUT: RegEx letzte zwei Unterstriche abschneiden
2Stefan2
Warum den Ausdruck jetzt "zu" allgemeingültig machen?
Lass das kleine o doch zwangsweise drin, damit bei schon umbenannten Dateien das Ganze nicht mehr wirken kann. Das ist auch der Grund, warum ich an der Dateiendung geankert habe:
(.+)_[^_]+_o(\.[^\.]+)?$
$1$2
Warum den Ausdruck jetzt "zu" allgemeingültig machen?
Lass das kleine o doch zwangsweise drin, damit bei schon umbenannten Dateien das Ganze nicht mehr wirken kann. Das ist auch der Grund, warum ich an der Dateiendung geankert habe:
(.+)_[^_]+_o(\.[^\.]+)?$
$1$2
Richtig, weil greedy.Stefan2 wrote:Aber das greedy des ersten '.+' ist wohl stärker.
TC plugins: PCREsearch and RegXtract
Es ist zwar nicht wahrscheinlich, dass praetors' Dateien auf Unterstrich+1Zeichen enden,
und ob Flickr immer ein 'o' anhängt oder auch mal ein anderes Zeichen weiß man auch nicht,
aber wenn man darauf prüfen wollte, würde ich es folgendermaßen probieren:
Suche: (.+)_.+_o
Ersetze: $1
[_]Ext
[X]RegEx
Beziehungsweise:
(.+)_[^_]+_o
$1
VON:
sa310038_22601314110_o.jpg
sa310038_o_22601314110_o.jpg
sa_310_038_22601314110_o.jpg
sa_310_038_TEST_Datei_22601314110_o.jpg
sa_310_038_TEST_Datei_o_22601314110_o.jpg
ZU:
sa310038.jpg
sa310038_o.jpg
sa_310_038.jpg
sa_310_038_TEST_Datei.jpg
sa_310_038_TEST_Datei_o.jpg
und ob Flickr immer ein 'o' anhängt oder auch mal ein anderes Zeichen weiß man auch nicht,
aber wenn man darauf prüfen wollte, würde ich es folgendermaßen probieren:
Suche: (.+)_.+_o
Ersetze: $1
[_]Ext
[X]RegEx
Beziehungsweise:
(.+)_[^_]+_o
$1
VON:
sa310038_22601314110_o.jpg
sa310038_o_22601314110_o.jpg
sa_310_038_22601314110_o.jpg
sa_310_038_TEST_Datei_22601314110_o.jpg
sa_310_038_TEST_Datei_o_22601314110_o.jpg
ZU:
sa310038.jpg
sa310038_o.jpg
sa_310_038.jpg
sa_310_038_TEST_Datei.jpg
sa_310_038_TEST_Datei_o.jpg
Nur mal so eine Idee:
Wenn die Dateinamen immer um die gleiche Anzahl Zeichen verlängert werden, kann man genau diese Anzahl Zeichen einfach mit dem Mehrfach-Umbenenn-Tool wieder löschen:
Zu ändernde Dateien markieren
STRG+M öffnet M.U. Tool
Wenn z.B. immer 14 Stellen angehängt wurden, schreibt man in die Umbenennmaske Dateiname: [N-259-15]
(mit Klammern und immer eine Stelle höher, als die zu entfernenden Zeichen.
In der Vorschau kann man prüfen, ob das Ergebnis passt...notfalls mehrmals in kleineren Schritten vorgehen.
Ganz unten "Start!" drücken, wenn alles passt.
Wenn die Dateinamen immer um die gleiche Anzahl Zeichen verlängert werden, kann man genau diese Anzahl Zeichen einfach mit dem Mehrfach-Umbenenn-Tool wieder löschen:
Zu ändernde Dateien markieren
STRG+M öffnet M.U. Tool
Wenn z.B. immer 14 Stellen angehängt wurden, schreibt man in die Umbenennmaske Dateiname: [N-259-15]
(mit Klammern und immer eine Stelle höher, als die zu entfernenden Zeichen.
In der Vorschau kann man prüfen, ob das Ergebnis passt...notfalls mehrmals in kleineren Schritten vorgehen.
Ganz unten "Start!" drücken, wenn alles passt.