Extrahieren Sie Elemente, indem Sie mit Java reguläre Ausdrücke aus einer großen Menge von HTML ersetzen

Was ich diesmal machen möchte

Lesen Sie HTML-Textdaten, lesen Sie sie mit Java, nachdem Sie sie in die Liste aufgenommen haben Lesen Sie die String-Daten in der Liste, ersetzen Sie sie durch einen regulären Ausdruck, verarbeiten Sie sie und speichern Sie sie in allen.

Annahme

Stapelverarbeitung einer großen Anzahl ähnlicher Dateien Das Hinzufügen der zeilenweisen Liste zum Lesen der Datei mit Java wurde abgeschlossen.

Vorteil

Sie können die Daten, die im selben regulären Ausdruck wie ein anderer stecken bleiben, speichern Unterstützt mehrere Treffer Die Anzahl der Daten ändert sich nicht, indem eine Ausnahmeverarbeitung durchgeführt wird, wenn kein Treffer vorliegt

Spezifikation

Durchsuchen Sie alle Daten von String in der Liste Wenn die gewünschten Daten gefunden wurden, werden sie ersetzt und in all (String) gespeichert. Ab welcher Nummer sollen die gewünschten Daten gespeichert werden Was zu tun ist, wenn keine gewünschten Daten vorhanden sind, kann durch das Argument entschieden werden Überhaupt keine Operation, wenn "" Zu anderen Zeiten wird das angegebene Zeichen hinzugefügt und durch Kommas getrennt.

Streit Bedeutung
be String vor dem Ersetzen des regulären Ausdrucks
af String nach dem Ersetzen des regulären Ausdrucks
no Zeichenkette, wenn sie nicht in der Suche enthalten ist
s Von wie vielen Treffern denkst du?
num Wie viele Treffer sind zu beachten?
be_set Startet die Suche, nachdem die hier eingegebene Zeichenfolge getroffen wurde
af_set Beenden Sie die Suche, wenn die hier eingegebene Zeichenfolge getroffen wird

Quellcode-Fluss

Wie rufe ich an?

call


sp("<.+><.+-(.+)\"></i></div>"
,"$1q"
,"noq"
,1
,14
,"<.+>Datentabelle 1</h3>"
,"<.+>Datentabelle 2</h3>");

Schreiben Sie in einem solchen Fall in HTML Datentabelle 1 Von Datentabelle 2 Mit Elementen bis zu <.+><.+-(.+)\"></i></div> Was trifft den regulären Ausdruck von $1q Ersetzen durch ($ 1 ist das Ersetzungssymbol nach einem Treffer beim Ersetzen eines normalen Ausdrucks. Der Treffer in Klammern wird so wie er ist als Element behandelt. Wenn keine Daten vorhanden sind noq Dies ist ein Prozess zum Verschieben des Speicherorts der Datenzelle, wenn es sich bei der späteren Verarbeitung um eine Leerzeile handelt.

Danach wird ein Komma hinzugefügt und der Vorgang beendet. Selbst wenn die Formate von Daten 1 und Daten 2 gleich sind, können vorteilhafterweise korrekte Daten korrekt erhalten werden.

Quellcode

grobal



ArrayList<String> list = new ArrayList<String>();
String all = "";
String qq = "qqqqqqqqq";  //Eine Saite, die nicht trifft
public static void add_all(String index){
    all = all + index + kn;
//kn ist ein Datenbegrenzer beim Hinzufügen von Daten beim Debuggen"\n"Zum Zeitpunkt der Veröffentlichung","Empfohlen
}

over


//Überladung mit weniger Argumenten
//qq ist eine Zeichenfolge, die nicht zu treffen scheint
//Suchen Sie immer nach einem Element, wenn es drei Argumente gibt
public static void sp(String be,String af,String no){
    int s = 1; int num =1;
    sp(be,af,no,s,num,qq,qq);
  }
  public static void sp(String be,String af,String no,int s,int num){
    sp(be,af,no,s,num,qq,qq);
  }

sp


public static void sp(String be,String af,String no,int s,int num ,String be_set,String af_set){
  int i;
  boolean be_flag = false;
  boolean af_flag = false;
  boolean cutset = false;
  //Wenn das Start- / End-Flag nicht eingegeben wird, führen Sie eine vollständige Suche durch.
  if(be_set.equals(qq) && af_set.equals(qq)){
    be_flag=true;
  }
  //Wenn die Anzahl der Suchtreffer eins beträgt, ist eine Hochgeschwindigkeitsverarbeitung mit dem Cutset-Flag möglich.
  if(s ==1 && num ==1){
    cutset = true;
  }
  ArrayList<String> save = new ArrayList<String>();
  save.clear();//Ich brauche es nicht, aber vorerst
  //Wiederholen Sie diesen Vorgang für die Listengröße
  for(i = 0;i < list.size();i++){
    //Listendaten abrufen
    String line = list.get(i);
    //Flag-Betrieb starten
    if(line.matches(be_set)){
      be_flag=true;
    }
    //Flag-Operation beenden
    if(line.matches(af_set) && be_flag){
      break;
    }
    if(line.matches(be) && be_flag){
      line = line.replaceAll(be,af);
      save.add(line);
      deb(0,line);
      //Ziel ist es, die Verarbeitung zu beschleunigen, wenn nur eine Daten durchsucht werden
      if(cutset){
        String tem = save.get(0);
        add_all(tem+",");
        return;
      }
    }
  }

  //Nach dem Lesen aller Daten
  //Wenn es keinen Treffer gab
  //Die Daten nach dem Austausch""Wenn nicht, fügen Sie das Argument Nr
  if(save.size() == 0){
    if(!no.equals(""))add_all(no);
  //Wann nicht
  }else{
    //Ausnahmebehandlung: Richten Sie die Anzahl der Eingaben und die Anzahl der Treffer aus
    if(save.size() < num){
      num = save.size();
    }
    if(save.size() < s){
      s = save.size();
    }
    //Fügen Sie allen nur den im Argument angegebenen Betrag hinzu
    for(i=0;i<num;i++){
      String tem = save.get(s+i-1);
      add_all(tem);
    }
  }
  //Nach der Datenreflexion durch Kommas getrennt
  if(!no.equals(""))add_all(",");
}

Nachwort

Dies ist das Ergebnis des Hinzufügens dessen, was ich brauche, ohne über die Struktur nachzudenken, aber für mich ist es nicht schlecht. Ich habe dies verwendet, um Daten aus HTML zu lesen. Ich denke, es ist in Ordnung, die Python-Bibliothek zu verwenden, aber ich habe dieses Format verwendet, weil es nicht lange dauerte, bis ich auf die Idee kam.

Recommended Posts

Extrahieren Sie Elemente, indem Sie mit Java reguläre Ausdrücke aus einer großen Menge von HTML ersetzen
[Java] Schneiden Sie einen Teil der Zeichenfolge mit Matcher und regulären Ausdrücken aus
Extrahieren Sie eine Zeichenkette, die mit einem Großbuchstaben (Ruby) in Großbuchstaben beginnt.
Ersetzen Sie durch einen Wert entsprechend der Übereinstimmung mit einem regulären Java-Ausdruck
Ich möchte mit einem regulären Ausdruck zwischen Zeichenketten extrahieren
[Android-Kotlin] Das Konvertieren von m-Präfix und s-Präfix, die Probleme mit Java in Kotlin darstellen, wird durch Ersetzen durch reguläre Ausdrücke entfernt.
<java> Teilen Sie die Adresse vor und nach der Adresse mit einem regulären Ausdruck
Extrahieren Sie einen Teil einer Zeichenfolge in Ruby
(Java) Implementieren von equals () für eine Klasse mit durch Vererbung hinzugefügten Wertelementen
[Java] Sortieren Sie ArrayList nach Elementen Ihrer eigenen Klasse
Extrahieren Sie die Elemente der Reihe nach aus dem Klassentyp ArrayList
Rufen Sie eine Methode mit Kotlins Rückrufblock von Java aus auf
[Hinweis] Erstellen Sie mit Docker eine Java-Umgebung von Grund auf neu
Zeichenfolge Ersetzen von Fällen, in denen ein Zeilenumbruch in * des regulären Ausdrucks in der Suchbedingung einer Zeichenfolge enthalten ist