2016-04-07 10 views
1

Beim Kopieren und Einfügen von Inhalt aus einem Word-Dokument in eine Vaadin7 RichTextArea (oder jedes andere Richtextfeld) gibt es viele unerwünschte HTML-Tags und Attribute. Da in einem aktuellen Projekt hat das Attribut Breite etwas lustiges Geschäft, würde Ich mag sieFehler beim Analysieren einer Zeichenkette mit einem Punkt in Java mit REGEX

mit folgendem funtion entfernen
private String cleanUpHTMLcontent(String content) { 
    LOG.log(Level.INFO, "Cleaning up that rubbish now"); 

    content = content.replaceAll("width=\"[0-9]*\"",""); // this works fine 
    content = content.replaceAll("width:[0-9]*[\\.|]*[0-9]*pt;",""); // not working 
    content = content.replaceAll(";width:[0-9]*[\\.|]*[0-9]*pt",""); // not working 
    content = content.replaceAll("width:[0-9]*[\\.|]*[0-9]*pt",""); // not working 
    return content; 
} 

Die erste Zeile funktioniert alte HTML-Tags wie width="500" zu entfernen, die anderen Linien gehen in das style-Attribut und versuchen, die Eigenschaften wie width:300.45pt; mit verschiedenen Positionen des Doppelpunkts zu entfernen.

Der Code funktioniert gut auf der Testseite http://www.regexplanet.com/advanced/java/index.html. Ich habe meine Regex-Strings hier speziell für Java generiert, aber es funktioniert immer noch nicht. Irgendjemand eine Idee?

Hier ist ein Beispiel, bei dem es nicht um die Breite Eigenschaft nicht finden

td style="width:453.1pt;border:solid windowtext 1.0pt; 

UPDATE

content = content.replaceAll("width:\\s*[.0-9]*pt;",""); // doesn't work 
    content = content.replaceAll(";width:\\s*[.0-9]*pt",""); // doesn't work 
    content = content.replaceAll("width:\\s*[.0-9]*pt",""); // works :-) 

es scheint, dass ich das Semikolon als auch zu entkommen mit ein Backslash? Ich werde prüfen, dass

+0

Versuchen Sie es mit '(?: \\ d + (?: \\. \\ d +)? (?: pt)?)' Mit allen. [Demo] (https://regex101.com/r/fJ2uC9/1) –

+1

Warum der vertikale Balken in '" [\\. |] "'? – Maljam

+0

kann ein Punkt sein oder es kann kein Punkt sein –

Antwort

2

Um eine beliebige Anzahl von Ziffern mit einem Punkt entfernen Sie eine negierte Zeichenklasse [.\d]* oder [.0-9]* verwenden können:

"\\bwidth:\\s*[.0-9]*pt;" 

Siehe regex demo

Die \b ist eine Wortgrenze (Marken sicher, dass wir nur width als ganzes Wort zusammenbringen).

Details:

  • \b - führende Wortgrenze
  • width: - Zeichenkette width:
  • \s* - 0+ Leerzeichen Symbole
  • [.0-9]* - 0+ Punkte oder Ziffern
  • pt; - wörtliche pt;