2016-04-01 8 views
0

Ich versuche, eine Zeichenfolge [] mit einer TXT-Datei zu erhalten, und ich muss alle Interpunktion mit einigen Ausnahmen entfernen. Hier ist mein Code:replaceAll() lösche alle Interpunktionszeichen mit diesen Ausnahmen

replaceAll("[^a-zA-Z ]", ""); 

Ausnahmen: 1.hyphen (en), die innerhalb eines Wortes sind. 2. loswerden der Wörter, die Ziffern enthalten 3. loswerden der Wörter enthält zwei Satzzeichen am Ende und am Anfang

+0

ich versuche ich zu nutzen t, und ich arbeite teilweise, aber ich werde auch Bindestrich (s) loswerden, die in einem Wort sind. – zzz

Antwort

0

[^ a-zA-Z] ist eine Zeichenklasse. Das bedeutet, dass nur ein Zeichen gefunden wird. In diesem Fall wird alles, was nicht a-z, A-Z oder ein Leerzeichen ist, abgeglichen.

Wenn Sie Wörter abgleichen möchten, müssen Sie Zeichenklassen mit Quantifizierern wie + verwenden. Wenn Sie verschiedene Muster zuordnen möchten, müssen Sie den logischen Operator | anwenden.

Wenn Sie dies wissen, können Sie jetzt Wörter abgleichen, die mit einer oder mehreren Nummern enden oder die eine Nummer in der Mitte haben [^a-zA-Z ][0-9]+|[^a-zA-Z ]+[0-9]. Ich überlasse es Ihnen als Übung, es für Ihre drei Fälle anzuwenden, da dies wie eine Schulaufgabe klingt.

+0

funktioniert nicht Kumpel. Ergebnis zeigt das gleiche – zzz

+0

in Ordnung, cool! Danke, Mann! – zzz

0

Ich habe sehr komplizierte Regex, aber es funktioniert.

\S*\d+\S*|\p{Punct}{2,}\S*|\S*\p{Punct}{2,}|[\p{Punct}&&[^-]]+|(?<![a-z])\-(?![a-z]) 

Erläuterung:

Match this alternative «\S*\d+\S*» 
    Match a single character that is NOT a “whitespace character” «\S*» 
     Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
    Match a single character that is a “digit” «\d+» 
     Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+» 
    Match a single character that is NOT a “whitespace character” «\S*» 
     Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
Or match this alternative «\p{Punct}{2,}\S*» 
    Match a character from the POSIX character class “punct” «\p{Punct}{2,}» 
     Between 2 and unlimited times, as many times as possible, giving back as needed (greedy) «{2,}» 
    Match a single character that is NOT a “whitespace character” «\S*» 
     Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
Or match this alternative «\S*\p{Punct}{2,}» 
    Match a single character that is NOT a “whitespace character” «\S*» 
     Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
    Match a character from the POSIX character class “punct” «\p{Punct}{2,}» 
     Between 2 and unlimited times, as many times as possible, giving back as needed (greedy) «{2,}» 
Or match this alternative «[\p{Punct}&&[^-]]+» 
    Match a single character present in the list below «[\p{Punct}&&[^-]]+» 
     Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+» 
     A character from the POSIX character class “punct” «\p{Punct}» 
     Except the literal character “-” «&&[^-]» 
Or match this alternative «(?<![a-z])\-(?![a-z])» 
    Assert that it is impossible to match the regex below with the match ending at this position (negative lookbehind) «(?<![a-z])» 
     Match a single character in the range between “a” and “z” «[a-z]» 
    Match the character “-” literally «\-» 
    Assert that it is impossible to match the regex below starting at this position (negative lookahead) «(?![a-z])» 
     Match a single character in the range between “a” and “z” «[a-z]» 

Beispiel:

String text ="a-b ab--- - ---a --- , ++++ ?%# $22 43 4zzv"; 

String rx = "(?i)\\S*\\d+\\S*|\\p{Punct}{2,}\\S*|\\S*\\p{Punct}{2,}|[\\p{Punct}&&[^-]]+|(?<![a-z])\\-(?![a-z])"; 

String result = text.replaceAll(rx, " ").trim(); 

System.out.println(result); 

-Code oben druckt:

a-b 
+0

bleibt es "-" und "-" + wort – zzz

+0

sowieso, danke tho! – zzz

+0

Was ist die Funktion jedes Zeichens? Ich bin immer noch dort stecken – zzz