Suche Muster für "Kleinbuchstaben gefolgt von Großbuchstaben"
Hasso
- regex
0 Rolf B1 TS0 Gunnar Bittersmann0 Tabellenkalk0 Hasso0 Rolf B
Liebe Foristen,
ich suche einen regulären Ausdruck, um einen Kleinbuchstaben oder eine Zahl gefolgt von einem Großbuchstaben zu matchen.
Ich habe den String "Aalbach, JanPhoenix" und möchte das durch "Aalbach, Jan - Phoenix" ersetzen.
Ich habe es mit ([a-z0-9])([A-Z]) versucht, aber das ergibt keinen Treffer.
Gruß Hasso
Hallo Hasso,
für Standard-ASCII-Buchstaben ist das so erstmal richtig und sollte den JanPhillip finden. Wenn es das nicht tut, liegt was anderes im Argen.
Hinzu kommt: Bei Namen wie René Martin oder gar Stephanus Ägidius versagt das Pattern. Hier sind die Unicode-Zeichenkategorien gefragt: \p{Ll} für Kleinbuchstaben und \p{Lu} für Großbuchstaben. Und \p{Nd} für Ziffern, wo wir schon dabei sind. Das Pattern könnte also lauten:
(\p{Ll}|\p{Nd})(\p{Lu})
Wobei sich mit der Sinn der Ziffern nicht erschließt. Außer R2D2 habe ich noch niemanden kennengelernt, dessen Vorname auf eine Ziffer endete 🤖.
Allerdings ist nicht Regex-Engine gleich Regex-Engine. Welche verwendest Du? In den meisten Fällen wird hier die Angabe der Programmiersprache genügen 😉. Das konkrete Statement, das Du programmiert hast, wäre auch interessant.
Rolf
Hallo Rolf,
Wobei sich mit der Sinn der Ziffern nicht erschließt. Außer R2D2 habe ich noch niemanden kennengelernt, dessen Vorname auf eine Ziffer endete 🤖.
Glaube ich nicht, kennst bestimmt noch mehr.😀
Ich glaube die Linkfunktion versagt bei URL's mit Klammern.
Gruss
Henry
@@Henry
Ich glaube die Linkfunktion versagt bei URL's mit Klammern.
Hab ich mal berichtigt.
[Otto 1](https://de.wikipedia.org/wiki/Otto_I._(HRR\))
Der Backslash stört. Wo kommt der her? @Christian Kruse
Das hatten wir doch gerade schon mal.
LLAP 🖖
Hallo Rolf,
ich brauche das für den FlashRenamer. Welche Regex-Engine der verwendet, weiß ich nicht. Dein Pattern hat aber nichts gebracht.
Trotzdem vielen Dank
Hasso
Hallo Hasso,
ich habe mir die Anleitung angeschaut. Möglicherweise versteht der FlashRenamer die Angabe [a-z0-9]
nicht, diese Variante ist nämlich nicht aufgeführt. Die \p{}
Unicode-Gruppen versteht er auch nicht. Hast Du mal ([a-z])([A-Z])
getestet?
Wenn das funktioniert, könnte man die Ziffern mittels eines ODER hinzunehmen:
([a-z]|[0-9])([A-Z])
Ansonsten bin ich mit meinem Latein, Griechisch und ggf. auch Klingonisch am Ende.
Rolf
Hello,
in welchem Umfeld, innerhalb welcher Sprache benutzt Du das Muster? Wie sind dort die Voreinstellungen für Casesensivity?
Ich hätte gedacht, dass Du nur lauter falsche Treffer bekommst.
Glück Auf
Tom vom Berg
@@Hasso
ich suche einen regulären Ausdruck, um einen Kleinbuchstaben oder eine Zahl gefolgt von einem Großbuchstaben zu matchen.
Ich habe den String "Aalbach, JanPhoenix" und möchte das durch "Aalbach, Jan - Phoenix" ersetzen.
Ich habe es mit ([a-z0-9])([A-Z]) versucht, aber das ergibt keinen Treffer.
Dann machst du was falsch:
"Aalbach, JanPhoenix".match(/([a-z0-9])([A-Z])/);
ergibt: Array(3) [ "nP", "n", "P" ]
Allerdings ist dein Suchausdruck nicht richtig:
"Aalbach, RenéPhoenix".match(/([a-z0-9])([A-Z])/);
ergibt: null
LLAP 🖖
Hallo,
Dann machst du was falsch:
Vielleicht aber auch nicht.
Möglicherweise steckt zwischen dem Klein- und dem folgenden Großbuchstaben einfach noch ein unsichtbares Zeichen…
Gruß
Kalk
Hello,
Dann machst du was falsch:
Vielleicht aber auch nicht.
Möglicherweise steckt zwischen dem Klein- und dem folgenden Großbuchstaben einfach noch ein unsichtbares Zeichen…
Das hieße also, dass man den String vorher durch den/einen Normalizer schicken sollte?
Glück Auf
Tom vom Berg
Hallo,
Das hieße also, dass man den String vorher durch den/einen Normalizer schicken sollte?
Könnte sein.
Ich hätte erst mal geguckt, wo kommt der String eigentlich her, warum ist der denn so verstümmelt?
Gruß
Kalk
Hallo Kalk,
nein, dazwischen steckt nichts.
Gruß Hasso
Hallo Gunnar,
dass der Suchausdruck nicht richtig ist, ist mir klar. Sonst hätte ich diesen Post nicht verfasst. Nur wüsste ich gerne, wie der richtige denn lauten müsste 😊
Trotzdem Danke
Gruss Hasso
@@Hasso
Nur wüsste ich gerne, wie der richtige denn lauten müsste 😊
Im Bereich bis U+00FF (Basic Latin und Latin-1 Supplement) sind die Groß- und Kleinbuchstaben jeweils gruppiert, sodass man die mit [A-ZÀ-ÖØ-Þ]
bzw. [a-zß-öø-ÿ]
angeben kann. Schon besser als nur [A-Z]
und [a-z]
; vielleicht reicht das ja für deine Zwecke.
Ab U+0100 (Latin Extended-A, …) geht das nicht mehr; Groß- und Kleinbuchstaben sind alternierend. Da braucht man dann die Unicode-Zeichenkategorien wie von Rolf gezeigt – sofern die jeweilige Regexp-Engine das unterstützt.
Ansonsten fiele mir noch ein, die Strings in NFD (decomposed) umzuwandeln (sofern die jeweilige Programmiersprache das unterstützt) und dann sowas wie [A-Z][\u{0300}-\u{0362}]*
bzw. [a-z][\u{0300}-\u{0362}]*
zu verwenden (U+0300 bis U+0362 sind kombinierende diakritische Zeichen) und hinterher wieder in NFC (composed) zu konvertieren. Das wäre aber eher ein übler Hack als eine vernünftige Lösung.
LLAP 🖖
Hallo,
Ich habe es mit ([a-z0-9])([A-Z]) versucht, aber das ergibt keinen Treffer.
Dann empfehle ich den Total Commander, mit dem klappt das.
Gruß
Kalk
Edith weint, dass der René auch vom TC ignoriert wird…
Vielen Dank an alle Helfer!
Ich habe es jetzt hinbekommen:
Such-Pattern:
(.+)([a-z0-9])([A-Z])(.+)
Replace-Pattern:
$1$2 - $3$4
Funktioniert allerdings nur, wenn es im String nur **einen **Wechsel Kleinbuchstabe/Großbuchstabe gibt.
Aber das erspart mir schon viel Handarbeit.
Hallo Hasso,
Ich habe es mit ([a-z0-9])([A-Z]) versucht, aber das ergibt keinen Treffer.
Ich habe es jetzt hinbekommen: Such-Pattern: (.+)([a-z0-9])([A-Z])(.+)
Man muss nicht verstehen, warum das Pattern auf einmal Treffer bringt, wenn es vorher keine brachte. Oder sind die Patterns vom FlashRenamer automatisch geankert (d.h. er denkt sich grundsätzlich ein ^ davor und ein $ dahinter)? In dem Fall wäre ggf. .* besser statt .+, weil es ja auch den Ausnahmefall geben kann, dass das zu ersetzende Pärchen ganz am Anfang oder Ende des Namens steht.
Rolf