RegEx /compilebekomme nicht die erwarteten Werte

OnDemand

Top Contributor
Hallo zusammen,
gegeben ist folgender String. Ich brauche daraus alle KEy-Value Paare also den Wert vor dem Doppelpunkt und den Wert dahinter zb

<b>Prozessor</b><br>Prozessorhersteller: Intel<br>Prozessorsockel: LGA 2066 (Socket R4)<br>Anzahl der unterstützten Prozessorkerne: 18<br>Prozessor Verlustleistung (max): 140 W<br><br><b>Speicher</b><br>Unterstützte Arbeitsspeicher: DDR4-SDRAM<br>RAM-Speicher maximal: 256 GB<br>Speicherspannung: 1.2 V<br>Unterstützte Arbeitsspeichergeschwindigkeit: 2133,2400,2666 MHz<br><br><b>Speicher-Controller</b><br>Unterstützte Speicherlaufwerk-Schnittstellen: SATA III<br>RAID Level: 0,1,5,10<br><br><b>Grafik</b><br>On-Board Grafikadaptermodell: Aspeed AST2500<br><br><b>Interne E/A-Anschlüsse</b><br>SATA III Anschlüsse: 8<br><br><b>E/A-Anschlüsse auf der Rückseite</b><br>Anzahl USB 2.0 Anschlüsse: 6<br>Anzahl USB 3.2 Gen 1 (3.1 Gen 1) Typ-A Ports: 5<br>Anzahl Ethernet-LAN-Anschlüsse (RJ-45): 2<br>Anzahl VGA (D-Sub) Anschlüsse: 1<br>Anzahl COM-Anschlüsse: 2<br><br><b>Netzwerk</b><br>WLAN: Nein<br>Eingebauter Ethernet-Anschluss: Ja<br>Ethernet Schnittstellen Typ: Gigabit Ethernet<br><br><b>Merkmale</b><br>Motherboardformfaktor: micro ATX<br>Motherboard Chipsatz: Intel® C422<br><br><b>Erweiterungssteckplätze</b><br>PCI-Express x16 (Gen 3.x)-Anschlüsse: 1<br><br><b>BIOS</b><br>BIOS-Typ: UEFI AMI<br>ACPI-Version: 6.0<br><br><b>Prozessor Besonderheiten</b><br>Trusted Platform Module (TPM): Ja<br><br><b>Betriebsbedingungen</b><br>Temperaturbereich bei Lagerung: -20 - 60 °C<br>Temperaturbereich in Betrieb: 0 - 50 °C<br>Luftfeuchtigkeit in Betrieb: 10 - 85%<br>Luftfeuchtigkeit bei Lagerung: 10 - 95%<br><br><b>Gewicht und Abmessungen</b><br>Breite: 243,8 mm<br>Tiefe: 243,8 mm<br><br><b>Sonstige Funktionen</b><br>PCI-Express x4 (Gen 3.x)-Anschlüsse: 1<br>PCI-Express x8 (Gen 3.x)-Anschlüsse: 2<br>Unterstützte DIMM-Modulkapazitäten: 4GB, 8GB, 16GB, 32GB, 64GB<br>Unterstützte LRDIMM Uhr Geschwindigkeiten: 2133,2400,2666 MHz<br>Unterstützte RDIMM Taktraten: 2133,2400,2666 MHz<br>Zahl der DIMM Slots: 4<br>Anzahl unterstützter Prozessoren: 1<br><br>

Prozessorhersteller: Intel

nicht aber die Werte innerhalb <b></b>

habe folgendes Versucht, bringt aber komischerweise nur 3 Einträge, kennt sich jemand auf diesem Planeten damit aus und versteht, was da vor sich geht?

Java:
 String s = productDataItem.getSpecs();
            Pattern p = Pattern.compile("^(<.+>)([a-z A-Z ]+?)(</.+>)$");
            Matcher m = p.matcher(s);
            if (m.matches()) {
                String raw = m.group(3).replaceAll("<b>", "").replaceAll("</b>", "");
                String[] raw1 = raw.split("<br>");
                for (String attKeyValue : raw1) {
                    if (attKeyValue.contains(":") && attKeyValue.equals("") == false) {
                        String[] keyValue = attKeyValue.split(":");
                        map.put(keyValue[0].trim(), keyValue[1].trim());
                    }
                }
            }
 
Ehrlich gesagt sehe ich gerade nicht was da das Problem ist, aber ich finde das RegEx-Konstrukt auch relativ komplex fuer etwas was man simpler abbilden kann laut deiner Beschreibung:

Java:
for (String line : source.split("<br>")) {
    if (line.contains(":")) {
        String[] splittedLine = line.split(":");
        
        String key = splittedLine[0].trim();
        String value = splittedLine[1].trim();
        
        System.out.println(key + ": " + value);
    }
}
 
Dein erster Reg-Ex ist komisch. Du suchst nach allen HTML-Markups, wo nur Buchstaben & Leerzeichen drin vorkommen. Das heißt, die meisten Texte solltest du nicht matchen, weil da Umlaute, Zahlen und andere Sonderzeichen drin vorkommen.
 
versteh ich nicht. Das ist alles eine Zeile wenn ich das ausgeben lasse. Der Zeilenumbruch <br> wird von Java gelesen und erkannt?
 
versteh ich nicht. Das ist alles eine Zeile wenn ich das ausgeben lasse. Der Zeilenumbruch <br> wird von Java gelesen und erkannt?
@Robert Zenz trennt explizit an "<br>", und nicht an Zeilenumbrüchen. Das, was dabei raus kommt, sind eben semantisch Zeilen, also macht es Sinn, die Variable line zu nennen, weil es eben ein mensch so sehen würde, wenn er es in formatiert anguckt, auch wenn da kein wirklicher Zeilenumbruch vorliegt.
 

Zurück
Oben