2012-03-30 10 views
2

Ich bin auf der Suche nach einem Regex, um alle nachfolgenden Sterne und alle Sternchen in einem Wort zu entfernen.Java Regex zum Entfernen von führenden und 'in Wort' Sternchen

*He*llo* -> Hello* <br> 
Thi*s *is* *a* t*est* -> This is* a* test* 

Ending Sternchen sollten akzeptiert werden.

Ich bin nicht wirklich mit Regex erfahren. Ich weiß, dass ich ein einfaches Programm schreiben kann, das jedes Wort einer Zeichenkette durchläuft und nachgestellte und 'in-word'-Sternchen entfernt - aber ich frage mich, ob mein Problem mit einer Regex gelöst werden kann oder nicht.

Ich hoffe, dass Sie mir helfen können. Vielen Dank im Voraus.

Mit freundlichen Grüßen, Ioannis K.

+0

Nur eine Anmerkung, 2. Ergebnis sollte "Das ist * a * test *", oder? – Betlista

+0

Ja, Betlista. Ich wollte nur maximal einen Stern am Ende haben. Fand meine Lösung. Danke nochmal an alle Helfer. –

Antwort

2

Sie müssen nach vorne schauen verwenden. hier

Werfen Sie einen Blick: http://www.regular-expressions.info/lookaround.html

Das ist so etwas wie: \ * |

Diese Regex sagt (($)?!): Löschen Sie alle *, die nicht durch ein Leerzeichen oder die Ende der Zeile. (nicht getestet)

+0

Leider funktioniert keiner der bereitgestellten Regexe. Ich testete ein bisschen um - aber hatte keinen Erfolg. Die In-Wort-Sternchen verschwinden. Aber mehrere nachlaufende oder führende Sternchen bleiben übrig. Oh ich verstehe .. Ich wollte sagen "führende Sterne sollten entfernt werden und in-Wort", Entschuldigung !! '*** Er * ll * o ** -> Hallo *'. Ich will nur maximal einen Stern am Ende haben. Sorry, das war mein Fehler! –

+0

was ist mit Blick nach vorne? Was ist das Ergebnis? –

+0

Am Anfang fehlte ein '\'. Also konnte ich es nicht konvertieren. Das funktioniert jetzt sehr gut! Vielen Dank! 'string.replaceAll (" \\ * (?! (| $)) "," ");' –

1

ersetzen

\**\b 

mit dem leeren String, global.

Java verwendet Strings reguläre Ausdrücke darzustellen, so müssen Sie entsprechend entkommen:

"\\**\\b" 
+0

Das Problem ist: '*** T * h * i * s ** ** ist * a * ** t * est * -> ** This ** * ist ein * * test *' It sollte sein: 'Dies * ist ein * Test *'. Entschuldigung für meinen Fehler. Habe mein Problem nicht genug angegeben! –

1
final String[] in = { "*He*llo*", "Thi*s is *a* t*est*" }; 
    for (final String s : in) { 
     System.out.println(s.replaceAll("\\*(\\b)", "$1")); 
    } 
+0

Vorsicht, dass \\ b Probleme verursachen kann. Es funktioniert nicht mit Sonderzeichen (aber die Frage ist ziemlich unklar) –

+0

Vielen Dank, aber das funktioniert nicht wie erwartet. '*** T * h * i * s ** ist * a * t * est * -> ** Dies ** ist ein * test *' Es gibt immer noch Sternchen. Und am Ende gibt es auch mehrere Sternchen. –

+0

@Ioannis Siehe meine Antwort. – Tomalak

Verwandte Themen