Regex für Inlineformatierungen

Fireball

Aktives Mitglied
Hallo Zusammen,

ich bräuchte bitte eure Hilfe. Ich habe einige Texte die gewissen Inlineformatierungen enthalten die ich gerne im ersten Schritt komplett entfernen wollen würde.

Die Texte können mit einem optionalen \A1; beginnen.

Die Grundformatierung sieht dann so aus:
{\fArial|b0|i0|c0|p34;Irgend ein Text hier}

Eine Verschachtelung ist ebenfalls möglich:
Das ist ein formatierter Text in {\fArial|b0|i1|c0|p34;Kursiv} und {\SansSerif|b1|i1|c0|p33;Fett} der dann normal weitergeht.

Die Formatierung beginnt immer mit einem {\f und geht bis zum Semikolon - der Formatierungsblock wird dann mit der geschweiften Klammer beendet.

Mein bisheriges Pattern hierzu sieht so aus: (\\A1;)?(\{\\f.+?;)
Leider habe ichs noch nicht geschafft die hierzu gehörige Schlussklammer zu Matchen.

Danke für eure Hilfe
 

mihe7

Top Contributor
Java:
public class Test {
    public static void main(String[] args) {
        String s = "Das ist {\\A1;\\fArial|b0|i1|c0|p34;Kursiv}, " +
            "das ist formatierter Text in {\\fArial|b0|i1|c0|p34;Kursiv} " +
            "und {\\SansSerif|b1|i1|c0|p33;Fett} der dann normal weitergeht.";

        System.out.println(s);
        System.out.println(s.replaceAll("\\{(\\\\A1;)?\\\\[^;]+;([^\\}]*)\\}", "$2"));
    }
}
 

Fireball

Aktives Mitglied
@mihe7
Danke schön, jedoch kommt bei mir der eigentliche Text der in der Formatierung ist mit, dieser sollte nicht beachtet werden.
Die Wörter zwischen ; und } sollten nicht gematcht werden -> Kursiv, Kursiv, Fett
 

Fireball

Aktives Mitglied
Hab es in einem Regextester gemacht und dort wurde es mir mit angezeigt, jedoch war dort der replace nicht da. Bei der direkten Ausführung hat es funktioniert.
Leider funktioniert das Pattern bei folgendem Fall nicht: Sollte eine Formatierung von Anfang bis Ende durch gehen und zwischen durch unterbrochen werden.

z.B.:
Code:
String s = "Das ist {\\A1;\\fArial|b0|i1|c0|p34;Kursiv, "
                + "das ist formatierter Text in {\\fArial|b0|i1|c0|p34;Kursiv} "
                + "und {\\SansSerif|b1|i1|c0|p33;Fett} der dann normal weitergeht.}";
 

mihe7

Top Contributor
Das ist auch ein völlig anderes Muster, für das IMO ein rekursiver regulärer Ausdruck verwendet werden müsste (beliebige Verschachtelungstiefe), der von Java nicht unterstützt wird und für den mir auch nicht klar ist, wie eine Ersetzung funktionieren würde. Vielleicht weiß hier jemand Bescheid? @httpdigest und @mrBrown würden mir da spontan einfallen.

Je nachdem, was nun das Ergebnis sein soll, könntest Du in abgeschwächter Form einfach den "vorderen" Teil und die schließende Klammer separat ersetzen.
 

httpdigest

Top Contributor
Java:
public class Regex {
  public static void main(String[] args) {
    String s = "Das ist {\\A1;\\fArial|b0|i1|c0|p34;Kursiv, "
             + "das ist formatierter Text in {\\fArial|b0|i1|c0|p34;Kursiv} "
             + "und {\\SansSerif|b1|i1|c0|p33;Fett} der dann normal weitergeht.}";
    String res = s.replaceAll("\\{(\\\\A1;)?[^;]+;|\\}", "");
    System.out.println(res);
  }
}
Hintergrund: Man muss die öffnenden und schließenden "Klammern" nicht matchen, da sie nur entfernt werden müssen. Wenn es eine öffnende ohne eine schließende "Klammer" bzw. auch eine schließende ohne eine öffnende Klammer gäbe, wäre das in der Quellsprache sicherlich sowieso ein Grammatikfehler. Wir brauchen das hier - denke ich - nicht nochmal validieren.
Ich kann mir aber vorstellen, dass es in der Quellsprache eventuelle Escape-Zeichen gibt, damit man auch '}' als valides Zeichen verwenden kann. Das müsste man dann noch erkennen/hinzufügen.
 

mihe7

Top Contributor
Das ist die separate Ersetzung des vorderen und des hinteren Teils. Ich meinte, ob Du evtl. weißt, ob/wie man sich in rekursiven Regexps auf Gruppen beziehen kann.
 

Fireball

Aktives Mitglied
Danke euch soweit. Ich habe noch weitere Bespiele gefunden die kommen könnten. Was ich mich jetzt Frage ist ob sich hierzu ein möglichst allgemeines Pattern finden lässt oder ob man einfach alle Fälle einzeln ablaufen sollte um diese dann aus dem Text zu entfernen. Anbei ein paar Beispiele:

{\Kmein Text} - {\K} ist hier die Formatierung
{\L\O\KmeinText Kombination} - {\L\O\K} Formatierungsgruppe, können auch einzeln oder in unterschiedlicher Reihenfolge kommen
\A1;mein Text mit einem Bruch {\H0.7x;\S1/2;} Bruch - \A1; (optional) und {\H0.7x;\S1/2;} ist die Formatierung
{\H0.7x;\Smein Text^;} - {\H0.7x;\S^;} ist die Formatierung
{\H0.7x;\S^mein Text;} - {\H0.7x;\S^;} ist die Formatierung
{\fArial|b1|i1|c0|p34;\H0.7x;\L\O\K\Smein Text^;}
Mein Text \pxi3; - \pxi3; ist die Formatierung
\pxi-2,l3,r2,t2;mein Text - \pxi-2,l3,r2,t2; ist die Formatierung
pxt2,c24,r46; mein Text \ptc4,r16; - pxt2,c24,r46; \ptc4,r16; ist die Formatierung
{\fArial|b0|i0|c0|p34;\C0;mein Text} - {\fArial|b0|i0|c0|p34;\C0;} ist die Formatierung

Eine Verschachtelung ist weiterhin möglich.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
F RegEx für Email Java Basics - Anfänger-Themen 2
U Regex für kommaseparierte Zahlen Java Basics - Anfänger-Themen 1
K Operatoren Regex für 10er Zahlen Java Basics - Anfänger-Themen 8
C Lösung für RegEx in Java gesucht Java Basics - Anfänger-Themen 2
truesoul Regex für www Java Basics - Anfänger-Themen 0
G Regex für 1 und 2 gesucht Java Basics - Anfänger-Themen 18
R Suche Regex Ausdruck für HTML Java Basics - Anfänger-Themen 11
P regex für leerzeilen Java Basics - Anfänger-Themen 14
E Regex für geschweifte Klammern? Java Basics - Anfänger-Themen 10
D Regex für Text Java Basics - Anfänger-Themen 2
A RegEx für java funktion Java Basics - Anfänger-Themen 3
G RegEx für leere IP Adresse? Java Basics - Anfänger-Themen 13
S Regex für Dezimalzahl. Problem mit Nachkommastellen Java Basics - Anfänger-Themen 5
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
B Regex Order unwichtig bei Lookaheads? Java Basics - Anfänger-Themen 7
F RegEx Hilfe Java Basics - Anfänger-Themen 5
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
W RegEx Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
A Zusammengesetzte Nomen/Straßennamen mit Regex-Ausdrücken trennen Java Basics - Anfänger-Themen 8
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
H Java Regex Aufzählung kontrollieren Java Basics - Anfänger-Themen 3
Nooobi Regex und .matches() geben keine Ausnahme Java Basics - Anfänger-Themen 10
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
K Wie verneine ich einen Regex? Java Basics - Anfänger-Themen 2
L Hilfe bei RegEx Java Basics - Anfänger-Themen 4
Dimax RegEx Java Basics - Anfänger-Themen 10
O Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht. Java Basics - Anfänger-Themen 9
O Text mit Regex trennen und wieder zusammenbauen Java Basics - Anfänger-Themen 5
L Regex issue Java Basics - Anfänger-Themen 4
B Regex Kombination benötigt Java Basics - Anfänger-Themen 5
strohkolben Regex Java Basics - Anfänger-Themen 3
OnDemand Regex oder Split? Java Basics - Anfänger-Themen 5
I String.split regex Frage Java Basics - Anfänger-Themen 2
C RegEx Problem Java Basics - Anfänger-Themen 4
Dimax RegEx funktionieren nicht Java Basics - Anfänger-Themen 7
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
K substitute mit regex Java Basics - Anfänger-Themen 10
G RegEx Java Basics - Anfänger-Themen 11
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
M Regex zum Integer.parseInt Java Basics - Anfänger-Themen 4
G Regex Java Basics - Anfänger-Themen 4
M Regex-Ausdruck: Alle Zeichen bis auf ein bestimmtes erlauben (p{L}) Java Basics - Anfänger-Themen 5
M Regex anpassen Java Basics - Anfänger-Themen 19
C Regex-Problem Java Basics - Anfänger-Themen 4
C Positive und negative Zahlen mit Regex extrahieren Java Basics - Anfänger-Themen 8
F RegEx "+" nur als Zeichen, nicht als Operator oder Sonstiges Java Basics - Anfänger-Themen 2
FelixN RegEx aus einem String als String-Array zurückgeben Java Basics - Anfänger-Themen 8
FelixN RegEx Erläuterung "ˆ[ˆa-zA-Z]+$" Java Basics - Anfänger-Themen 6
F Regex Hilfe Java Basics - Anfänger-Themen 3
I Regex findet keine Treffer Java Basics - Anfänger-Themen 4
C Regex Java Basics - Anfänger-Themen 2
C Probleme bei Regex Java Basics - Anfänger-Themen 9
B Regex ignorieren von Groß - Kleinschreibung Java Basics - Anfänger-Themen 1
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
O Regex Java Basics - Anfänger-Themen 2
F Switch Case Problem mit Regex lösen? Java Basics - Anfänger-Themen 6
H regex-Problem Java Basics - Anfänger-Themen 2
F Ist das ein korrekter Regex-Ausdruck? Java Basics - Anfänger-Themen 12
M Zahlenbereich mit RegEx Java Basics - Anfänger-Themen 3
B Hilfe bei Regex - Erstellung Java Basics - Anfänger-Themen 5
D regex Aufbau Frage Java Basics - Anfänger-Themen 4
W RegEx Matcher + Pattern und Emails Java Basics - Anfänger-Themen 8
R Rechenzeichen als regex Java Basics - Anfänger-Themen 10
S Ich verstehe die RegEx Tabelle von Javadoc nicht so ganz Java Basics - Anfänger-Themen 3
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
F RegEx Problem Java Basics - Anfänger-Themen 8
F Regex Hilfe Java Basics - Anfänger-Themen 14
G String nach Contains/Regex Java Basics - Anfänger-Themen 2
U RegEx alle Kommas bei den Zahlen in Punkt umwandeln Java Basics - Anfänger-Themen 3
K RegEx - Multiple Line Java Basics - Anfänger-Themen 3
S Regex Pattern Java Basics - Anfänger-Themen 3
K Regex: illegal character range Java Basics - Anfänger-Themen 4
F RegEX Hilfe Java Basics - Anfänger-Themen 8
V Java Regex richtig parsen Java Basics - Anfänger-Themen 2
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
N mein RegEx Java Basics - Anfänger-Themen 2
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern Java Basics - Anfänger-Themen 2
M Regex/matcher Java Basics - Anfänger-Themen 2
T Methoden String.matches() - Regex Java Basics - Anfänger-Themen 2
N Methoden Straßennamen und Hausnummer - RegEx Java Basics - Anfänger-Themen 19
W Erste Schritte Regex negieren Java Basics - Anfänger-Themen 3
W String match mit Wildcard ODER Regex Java Basics - Anfänger-Themen 1
E useDelimiter-Anwednung / Regex Java Basics - Anfänger-Themen 2
C java regex Java Basics - Anfänger-Themen 2
C Regex zum matchen ausserhalb von Tags Java Basics - Anfänger-Themen 3
O Regex zwischenspeichern Java Basics - Anfänger-Themen 6
O Regex Java Basics - Anfänger-Themen 5
R Einfacher Regex Java Basics - Anfänger-Themen 3
V RegEx Java Basics - Anfänger-Themen 15
HoloYoitsu Datentypen replaceAll() mit regex? Java Basics - Anfänger-Themen 5
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
G verwendung von regex Java Basics - Anfänger-Themen 3
X Regex splitten Java Basics - Anfänger-Themen 5
T Regex Problem Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben