Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht.

osion

Bekanntes Mitglied
Hallo

Ich habe folgenden Code (betrifft Zeile 18):

[CODE lang="java" highlight="18"]/**
* Ruft in einem bestimmten Absatz ein Wort oder Textteil auf und ersetzt ihn durch etwas selbst definiertes.
*
* @param search das zu ersetzende Wort
* @param substitute damit wird das Wort ersetzt
* @param paragraphNr definierte Nummer des Paragraphen
* @return Gebe 0 (Alles OK) oder Fehlermeldung zurück.
*/
public int replace(String search, String substitute, int paragraphNr) {
if (paragraphNr < 0) {
return 451;
}
if (text.isValidString(substitute)) {
String oldText = text.getParagraph(paragraphNr);
String newText;

if (substitute.matches(".*[\\s\\!\\?,.:;„\"'\\–]+$")) {
newText = oldText.replaceAll("\\b" + search + "\\b[.!?,;:\"'-()/]+", substitute);
} else {
newText = oldText.replaceAll("\\b" + search + "\\b", substitute);
}
return text.replacePartOfTheParagraphText(paragraphNr, newText);
}

return 450;
}[/CODE]

Original String: Mir geht es gut danke.
Neuer gewollter String: Mir geht gut tschau.
Ersetzt werden soll: danke. -> tschau.
Vorgabe: Ersetzt werden dürfen Wörter (egal bei diesem Problem) und Textteile (Gehe davon aus, dass nur Wörter + Satzzeichen).

Mein Problem ist, dass danke. nicht mit tschau. ersetzt wird. Gibt es eine Möglichkeit Satzzeichen auch in \b zu nehmen oder eine einfachere Variante?
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Mit dem if bin ich erstmal nicht so einverstanden. Du suchst doch in dem oldtext dein searge und willst es mit substitute ersetzen.
Dein if wird nie das machen was Du willst. was soll es in den substitute mit dem matches zu suchen.

Du willst doch erstmal schauen ob in den Paragrafen das gesuchte Wort vorhanden ist.
Und dann wenn ja ersetzen.
 

osion

Bekanntes Mitglied
Mit dem if bin ich erstmal nicht so einverstanden. Du suchst doch in dem oldtext dein searge und willst es mit substitute ersetzen.
Dein if wird nie das machen was Du willst. was soll es in den substitute mit dem matches zu suchen.

Du willst doch erstmal schauen ob in den Paragrafen das gesuchte Wort vorhanden ist.
Und dann wenn ja ersetzen.
Ich suche nach Satzteile, dass Problem ist, wenn jemand ein Satzzeichen schreibt, dann wird kein Leerschlag gemacht und somit bei \b auch nicht ersetzt. Gleichzeitig darf ein Wieder nicht ersetzt werden wenn ich er durch en ersetzen will.

Es könnte auch folgendes Vorkommen:
Original: Ich gehe nach hause. Kommst du mit?
Zu ersetzen: hause. -> in die Kirche.
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn ich das richtig sehe musst du zwei Fälle unterscheiden:
search endet auf einen Buchstaben, dann muss danach das Wort zu Ende sein, das erreichst du ja mit \b.
Oder aber search endet nicht auf einen Buchstaben (sondern zB den Punkt), dann musst du genau diesen String ersetzen.

Das scheinst du ja auch zu versuchen (mit dem if), die Richtung ist aber etwas falsch. Einmal ist die Bedingung falsch, du prüfst substitute und nicht search. Dann behandelst Du ersten Fall richtig (der else-Block), im anderen Fall baust Du dir aber einen sehr merkwürdigen Regex, das muss man dort mMn gar nicht.

Außerdem kannst du den Such-String nicht direkt im Pattern nutzen, da ja zB der Punkt dabei nicht den Punkt, sondern jedes Zeichen matched. Die Klasse Pattern bietet da aber was passendes für.
 

Jw456

Top Contributor
Java:
if (substitute.matches(".*[\\s\\!\\?,.:;„\"'\\–]+$")) {
            newText = oldText.replaceAll("\\b" + search , substitute);
        } else {
            newText = oldText.replaceAll("\\b" + search + "\\b", substitute);
        }
so sollte dien satz ersetzt werden
 

osion

Bekanntes Mitglied
Java:
if (substitute.matches(".*[\\s\\!\\?,.:;„\"'\\–]+$")) {
            newText = oldText.replaceAll("\\b" + search , substitute);
        } else {
            newText = oldText.replaceAll("\\b" + search + "\\b", substitute);
        }
so sollte dien satz ersetzt werden
Das geht leider nicht. Es ersetzt nicht die Satzzeichen:
Hallo wie geht es dir? -> Hallo wie geht es mir?? (Ersetze: Hallo wie geht es mir?)

Der Grund ist, weill ? das wie ein Kommando interpretiert wird. Kann ich den ganzen String ESCAPEN für Regex und wie?
 

Anhänge

  • 1636478950906.png
    1636478950906.png
    6,7 KB · Aufrufe: 1
Zuletzt bearbeitet:

osion

Bekanntes Mitglied
Java:
    public int replace(String search, String substitute, int paragraphNr) {
        if (paragraphNr < 0) {
            return 451;
        }
        if (text.isValidString(substitute)) {
            substitute = substitute.replace("?", "\\?")
                    .replace("!", "\\!");
            search = search.replace("?", "\\?")
                    .replace("!", "\\!");
            
            String oldText = text.getParagraph(paragraphNr);
            String newText;
            if (substitute.matches(".*[\\s\\!\\?,.:;„\"'\\–]+$")) {
                newText = oldText.replaceAll("\\b" + search, substitute);
            } else {
                newText = oldText.replaceAll("\\b" + search + "\\b", substitute);
            }
            return text.replacePartOfTheParagraphText(paragraphNr, newText);
        }

        return 450;
    }
Die Lösung wäre etwas in dieser Art.
 

osion

Bekanntes Mitglied
Geht doch nicht.....Das Fragezeichen bleibt.
Kennt jemand eine Möglichkeit, dass ich in einem String auch Regex Befehlszeichen escapen kann..und das es klappt?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
HoloYoitsu Datentypen replaceAll() mit regex? Java Basics - Anfänger-Themen 5
F String.replaceAll() funktioniert nicht richtig oder habe ich den falschen Regex?? Java Basics - Anfänger-Themen 3
F Methoden replaceAll (regex) HTML Java Basics - Anfänger-Themen 3
G Frage zu replaceAll und regex Java Basics - Anfänger-Themen 3
S string replaceAll regex Java Basics - Anfänger-Themen 2
F regex bei replaceAll und backslash ersetzen geht nicht. Java Basics - Anfänger-Themen 1
H replaceAll und RegEx Java Basics - Anfänger-Themen 3
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
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
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
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
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
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
C Positive und negative Zahlen mit Regex extrahieren Java Basics - Anfänger-Themen 8
F RegEx für Email Java Basics - Anfänger-Themen 2
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
F Regex für Inlineformatierungen Java Basics - Anfänger-Themen 12
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
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
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
C Lösung für RegEx in Java gesucht 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
truesoul Regex für www Java Basics - Anfänger-Themen 0
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
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
B String nach regex überprüfen Java Basics - Anfänger-Themen 6
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben