2016-05-18 6 views
1

Ich schabe Daten von der Website und die Daten speichert in CSV-Datei. Es gibt ein TD, in dem das Datum mit dem Format 'dd/m/jjjj' erscheint. Nun, was ich zu tun habe, muss ich 1 drucken, wann immer das Datum in diesem td kommen wird. Also habe ich es mit dem folgenden Code versucht.Wie setze ich Datumsformat mit Regex mit jsoup java

if (tdElements.text().matches("\\d+\\/\\d+\\/\\d+")) { 
        sb.append("1"); 
       } 

aber es funktioniert nicht. Durch die Verwendung von "Matches" funktioniert das aktuelle Datum (18.5.2016) ebenfalls nicht, aber es arbeitet mit Contains. Aber Regex funktionieren auch nicht mit 'enthält' so freundlicherweise bieten mir Lösung, wie kann ich mein Problem lösen.

Antwort

1
if (tdElements.text().matches("\\d+\\/\\d+\\/\\d+")) { 
    sb.append("1"); 
} 

Der obige Code legt nahe, mehrere td s auf einmal sind manipuliert.
Die text() Methode gibt den kombinierten Text der td s zurück.
Dies ist der Grund, warum die matches Methode nichts findet.

Stattdessen laufen die Regex auf den Text jedes td wie unten:

Matcher dateMatcher = Pattern.compile("\\d+\\/\\d+\\/\\d+").matcher(""); 

Document doc = ... 
Elements tdElements = doc.select(...); 

for(Element td : tdElements) { 
    if (dateMatcher.reset(td.ownText()).matches()) { 
     sb.append("1"); 
    } 
} 
+0

von oben Code hinzugefügt wird, geben die folgende Fehlermeldung ... „nicht-statische Variable dateMatcher kann nicht von einem statischen referenziert werden Kontext ---- " –

+0

@AhmedTalha Der gesamte obige Code sollte innerhalb eines Methodenrumpfs verwendet werden. – Stephan

+0

Entschuldigung ... ich habe den Matcher eigentlich außerhalb der Methode definiert .. Vielen Dank Stephan es working man ... –