Regulärer Ausdruck entfernt alle Wörter, die kürzer als n sind

8

Nun, ich suche nach einem regulären Ausdruck in Java, der alle Wörter löscht, die kürzer als drei Zeichen sind. Ich dachte, etwas wie \s\w{1,2}\s würde alle 1 und 2 Buchstaben Wörter (ein Leerzeichen, ein bis zwei Wort Zeichen und ein anderes Leerzeichen) greifen, aber es funktioniert einfach nicht. Wo liege ich falsch?

    
janesconference 26.09.2009, 00:07
quelle

4 Antworten

11

Ich habe es ziemlich gut funktioniert, aber es dauerte zwei Durchgänge.

%Vor%

Der erste Durchlauf ersetzt alle Wörter, die weniger als drei Zeichen enthalten, durch ein einzelnes Leerzeichen. Beachten Sie, dass ich den Apostroph in die Zeichenklasse einbeziehen musste, um zu eliminieren, weil das Wort "Ich bin" mir Probleme ohne es gab. Sie können andere Sonderzeichen in Ihrem Text finden, die Sie hier ebenfalls einfügen müssen.

Der zweite Durchgang ist notwendig, weil der erste Durchgang ein paar Stellen verlassen hat, an denen doppelte Räume waren. Dadurch werden alle Vorkommen von 2 oder mehr Leerzeichen auf eins reduziert. Es liegt an dir, ob du das behalten musst oder nicht, aber ich denke, es ist besser, wenn die Räume zusammenfallen.

Ausgabe:

  

Nun, ich suche nach einem regulären Ausdruck in Java, der alle Wörter löscht, die kürzer als drei Zeichen sind.

     

Nun, ich suche nach regexp Java, das alle Wörter löscht, die kürzer als die Zeichen sind.

    
Bill the Lizard 26.09.2009, 00:48
quelle
3

Wenn der Leerraum nicht übereinstimmen soll, sollten Sie

verwenden %Vor%

um die Wortgrenzen zu erhalten.

Das funktioniert für mich in RegexBuddy mit dem Java-Geschmack; für die Testzeichenfolge

"Der Hund macht eine Katze Spaß"

hebt "is" und "a" hervor. Ähnlich für Wörter am Anfang / Ende einer Zeile.

Vielleicht möchten Sie ein Codebeispiel posten.

(Und wie GameFreak gerade geschrieben hat, werden Sie immer noch mit doppelten Leerzeichen enden.)

BEARBEITEN:

%Vor%

ist eine andere Option. Dadurch wird das Problem des Platzmangels teilweise behoben, obwohl Wörter am Ende einer Zeichenfolge oder gefolgt von Satzzeichen immer noch Probleme verursachen können. Zum Beispiel: "Ein Hund macht Spaß, nein?" wird "Hundespaß?" In jedem Fall werden Sie immer noch Probleme mit der Großschreibung haben (Hund sollte jetzt Hund sein).

    
TrueWill 26.09.2009 00:15
quelle
1

Versuchen Sie: \b\w{1,2}\b , obwohl Sie immer noch die doppelten Leerzeichen entfernen müssen, die angezeigt werden.

    
GameFreak 26.09.2009 00:13
quelle
1

Wenn Sie eine Zeichenfolge wie folgt haben:

%Vor%

Dieser Regex passt alle Wörter in der Zeichenfolge an, die länger als oder gleich 3 Zeichen lang sind:

%Vor%

Ergebnis:

%Vor%

Das ist für mich der einfachste Ansatz. Warum versuchst du zu vergleichen, was du nicht willst, wenn du das, was du willst, viel einfacher vergleichen kannst? Keine doppelten Leerzeichen, keine Reste, und die Interpunktion steht unter Ihrer Kontrolle. Die anderen Ansätze brechen auf mehreren Feldern und sind nicht sehr robust.

    
Jed Smith 26.09.2009 00:16
quelle

Tags und Links