RegExp-Frage zu Umlauten

rongador

Commander
Registriert
Mai 2011
Beiträge
2.708
Hi,

ich verwende eine automatische Benennung von Dateien, wo bestimmte Texte automatisch übernommen werden. Aktuelles Beispiel:

[^\Beispieltext:\(r"\s+\b|\b\s"), "")].*

Ich möchte gleich dazu sagen, dass ich weder Programmierer noch Entwickler bin, mir diese "RegExp" somit selbst zusammengereimt habe und nicht weiter in die Materie eingetaucht bin. Mit ^\Beispieltext:\ entferne ich z.B. diesen "Beispieltext" und mit (r"\s+\b|\b\s"), "") entferne ich das darauf folgende Leerzeichen.

Ich möchte nur folgendes Problem lösen:

Wenn bestimmte Texte z.B. mit Umlauten beginnen, werden diese bei der automatischen Benennung einfach ignoriert. Aus z.B. einem "Über dieses Beispiel" wird dann bei der finalen Benennung ein "ber dieses Beispiel", die Umlaute am Anfang verschwinden einfach.

Erkennt jemand von Euch, warum das so ist und weiß jemand, wie ich diese RegExp umändern muss, damit dies nicht mehr passiert?

Gruß
 
Wenn du mit regulären Ausdrücken arbeiten willst: https://regex101.com/ Oben den Regex eingeben, unten den Beispieltext. Ggf. den g modifier anwählen, dann siehst du, worauf der Regex matcht.

Gib uns am Besten den richtigen Text vor und sag was du matchen willst, dann kann man dir besser helfen, als wenn du hier nur mit unvollständigen Schnipseln hantierst.

Wenn du Umlaute u.ä. matchen willst, wäre schon mal der u (Unicode) Modifier ganz ratsam. \w matcht dann nicht nur auf [A-Za-z0-9_], sondern auch auf Umlaute.
 
Ein Beispieltest wäre zum Beispiel:

Beispieltext: Übermenschliche Titel mit Umlauten

Hier möchte ich automatisch nur "Übermenschliche Titel mit Umlauten" übernehmen, also soll "Beispieltext:" verschwinden, auch das darauf folgende Leerzeichen, der Rest soll exakt inklusive Umlauten übernommen werden. Mit meinem RegExp funktioniert das wunderbar, nur die Umlaute am Anfang machen stets Probleme.
 
Wenn du praktisch nur den Beginn weg trimmen möchtest, dir nach dem Leerzeichen egal ist was kommt, dann reicht dafür einfach:
^Beispieltext:\s*
und ersetzen durch nichts.

E: In was für eine Programmiersprache verwendest du den Regex?
 
Zuletzt bearbeitet:
Das probiere ich mal aus. Gibt es eigentlich auch eine Möglichkeit, bei dem Text nach ^Beispieltext:\s* alle Doppelpunkte z.B. in - umwandeln zu lassen? Beispiel:

Beispieltext: Übermenschliche Titel: Mit Umlauten

Hier wird ja "Beispieltext: " inklusive dem Leerzeichen weggetrimmt - ist es möglich, dass die Doppelpunkte beim darauf folgendem Text so umgewandelt werden, dass es schlussendlich so aussieht?:

Übermenschliche Titel - Mit Umlauten

Hier wurde also ein Leerzeichen vor den Doppelpunkt gesetzt und der Doppelpunkt dann mit einem "-" ersetzt.

Ist das möglich?

Ich weiß nicht, welche Programmiersprache verwendet wird. Ich verwende ein Plugin für "intelligente Namensregeln", da kann ich RegExp definieren.

Gruß
Ergänzung ()

PS: Klappt jetzt gut, die Umlaute werden nicht mehr abgeschnitten. Wenn das mit dem Doppelpunkt-Problem noch funktioniert, wäre ich happy :-)
 
Danach einfach noch einen weiteren Suchlauf machen:
":\s*" ersetzen durch " - " ? ;)
 
Irgendwie klappt das nicht mit dem Ersetzen der Doppelpunkte. Ich muss das ja alles in einer Zeile schaffen, also direkt nach ^Beispieltext:\s*

Wie sieht denn diese Zeile korrekt angepasst aus, so dass sie einerseits das "Beispieltext:" als auch die Leerzeile danach entfernt und dann beim folgenden Text alle ":" in " -" ändert? Ich bekomme es nicht hin mit dem Ersetzen :-/
 
Mit dem RegEx allein kannst du auch keine Veränderung vornehmen. Mit RegEx erstellst du im Grunde nur ein Pattern (Suchmuster), welches du dann in einer Ersetzlogik einsetzt.

Beispiel:

PHP:
<?php

$str = 'Beispieltext: Übermenschliche Titel: Mit Umlauten'; // Originaler String
$pat1 = '/^Beispieltext:\s*/'; // Erstes Suchmuster um den ersten Teil zu entfernen
$pat2 = '/:\s*/'; // Zweites Suchmuster, um den : in ein - zu wandeln

$res1 = preg_replace($pat1, '', $str); // Entferne Beispieltext:\s
$res2 = preg_replace($pat2, ' - ', $res1); // Nimm $res1 und ersetze Übermenschliche Titel: Mit Umlauten <--> Übermenschliche Titel - Mit Umlauten


echo "<b>Orignal Text:</b> " .$str. "<br/>";

echo "<b>Neuer Text:</b> " .$res2;

?>

Deshalb kam auch die Frage auf, in welcher Programmiersprache du dies verwenden möchtest. Wenn es sich um ein Plugin handelt, in welcher Software wird dieses Plugin eingesetzt?

EDIT:

Man kann das gewünschte auch in einer Zeile "erfassen, es führt dann aber dennoch nicht zu einer Ersetzung.

So würde das Pattern (Suchmuster) aussehen, welches beide gewünschten Teile erfasst.

PHP:
(^Beispieltext:\s*)|(:\s*)
 
Zuletzt bearbeitet:
Ich verwende zum Beispiel den "Video DownloadHelper" für Firefox. Dort genügt z.B.

[^Beispieltext:\s*].*

um "Beispieltext" zu entfernen inkl. Leerzeichen danach und nur den darauf folgenden Text zu übernehmen.
 
Also gibt es dazu keine Lösung im Bezug auf diese Erweiterung? Aktuell (auch ohne zusätzliche RegEx) werden Doppelpunkte einfach übergangen - ich hätte sie gerne gegen " -" ersetzt. Aber offenbar nicht möglich?
Ergänzung ()

PS: Was ich auch nicht nachvollziehen kann: Es werden sogar teilweise Anfangsbuchstaben einfach weggelassen, die z.B. auch in "Beispieltext" vorkommen oder wie "Beispieltext" hier beispielsweise mit "Be" beginnen. Also würde eine Überschrift z.B. "Belegte Brötchen" heissen, so kommt schlussendlich nur "legte Brötchen" raus. Verstehe ich nicht.
 
Eine Lösung glaube ich nicht direkt. Ich habe mir diesen Downloader am Wochenende mal angeschaut und da sieht es eher schlecht aus, wenn du nur einen Durchlauf machen kannst. Man könnte eventuell mit einer Gruppierung arbeiten, getestet habe ich dies allerdings noch nicht mit dem Downloader, wobei es auch leider nur sehr wenig bis gar keine Dokumentation über die Funktionsweise gibt.

Hier mal ein Beispiel: https://regex101.com/r/UPdUWh/2 (dies kann man sicherlich noch minimieren, aber zur Veranschaulichung sollte es reichen)

Was das belegte Brötchen angeht, das liegt an Deinen [^], denn damit findet er alle Zeichen, welche nicht enthalten sind und die die enthalten sind, werden entfernt.
 
Zuletzt bearbeitet:
Aber wohl nur am Anfang des Titels? Denn nur weil "Beispieltext" zB ein "i" enthält werden im zu übernehmenem Titel nicht alle "i" entfernt. Wie muss der RegEx denn lauten, damit tatsächlich nur dieser "Beispieltext: " inklusive Doppelpunkt und Leerzeichen entfernt werden? Also exakt dieser Text und nicht einfach so irgendwelche anderen Buchstaben am Anfang?
 
Wenn du nur das "Beispieltext: " entfernen möchtest, dann benutze am besten die sogenannten Word Boundaries.

Beispiel:
PHP:
\b(Beispieltext:\s)

Damit matcht dann nur "Beispieltext: "

Und ja, das andere matcht nur am Anfang, weil du ein "^" vorangesetzt hast und damit bestimmst, dass es am Anfang des Strings kommt.
 
Ich weiß schon sehr genau, warum ich kein Programmierer/Coder/Entwickler/etc. geworden bin.

Ich habe jetzt z.B.

\b(Beispieltext:\s)

verwendet.

Jetzt wurde aber nicht nur der Titel eines Videos übernommen, sondern auch der übergeordnete Name der ganzen Seite, so dass es z.B. "Beispieltitel: Der gesamte Seitentitel" heißt. Das konnte ich vorher offensichtlich durch
[^Beispieltext:\s*].* verhindern (vielleicht durch die eckigen Klammern oder das .* am Ende?

Ich habe daher (testweise) mal [\b(Beispieltext:\s)].* draus gemacht. Ergebnis: Jetzt ist zwar der übergeordnete Seitentitel weg, aber nun verschwinden sogar Buchstaben am Anfang des ersten Wortes, die gar nicht in "Beispieltext" vorkommen, so dass z.B. aus "Medizin" nur noch "izin" wird, d.h. "Med" ist verschwunden.

Das ist so verworren :-(
 
Versuch es mal damit: [^\b(Beispieltext:\s)].*

Beachte aber, dass hier wieder das "^" drin ist, somit schaut er nur am Anfang eines Strings.
 
Jetzt ist (wie gewollt) der unnötig abgehangene Seitentitel verschwunden, aber dafür wieder bei manchen ersten Worten einfach Buchstaben weg. Puh. Mit \b(Beispieltext:\s) klappt es, aber das spuckte eben nicht nur den Titel aus, sondern nach einem : auch den gesamten Seitentitel. Echt komisch.
 
Wenn ich

[\b(Beispieltext:\s)].*

verwende, wird korrekt nur der Titel übernommen, kein angehangener Seitenname. Aber warum wird z.B. beim ersten Wort "Medizin", das "Med" gelöscht und nur noch "izin" übrig gelassen? Weder M noch D sind in "Beispieltext" vorhanden?
 
Wenn man den genauen Mechanismus von dem Downloader kennen würde, dann könnte man das RegEx Suchmuster auch besser zusammen basteln. Wie aber schon geschrieben, gibt es leider keine direkte Dokumentation dazu, was es leider umso schwerer macht. An der Stelle kann man leider nur ausprobieren.

Nimm Dir am besten das letzte Beispiel und versuch dann auf der von Yuuri genannten Seite: https://regex101.com/ Deinen Titel und das Suchmuster anzupassen.
 
Die Seite benutze ich schon die ganze Zeit :-)
 
Nur als Beispiel: Gib doch mal unter Regular Expression

[\b(Beispieltext:\s)].*

ein und dann bei Test String

Medizin vs. Philosophie

Da siehst Du, dass das erste "M" einfach gelöscht wird.
 

Ähnliche Themen

Antworten
2
Aufrufe
1.005
Antworten
4
Aufrufe
1.128
JavaScript Regexp Frage
Antworten
3
Aufrufe
895
Zurück
Oben