## Reguläre Ausdrücke (Regex) Sonderzeichen (`*+?{}[]\|()`) mit `\` escapen. * **Platzhalter:** `.` (Zeichen), `\d` (Ziffer), `\w` (Buchstabe/Ziffer), `\s` (Whitespace). Großbuchstaben (`\D`, `\W`, `\S`) negieren die Auswahl. * **Auswahl:** `[...]` (Zeichenmenge), `[^...]` (negierte Menge), `[a-z]` (Bereich). * **Wiederholung:** `*` (0+), `+` (1+), `?` (0-1), `{n,m}` (Anzahl). `*?` für non-greedy. * **Logik & Gruppen:** `()` (Gruppe), `(?P...)` (benannte Gruppe), `|` (ODER). * **Position:** `^` (Anfang), `$` (Ende), `\b` (Wortgrenze). **Beispiel**: ```python ^(?P\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})\s\[(?PINFO|WARN|ERROR)\]\s\(user:\s'(?P[\w\.-]+@[\w\.-]+)'\)\s"(?P.*?)"$ ```` ## XPath & JSONPath * **XPath (XML):** Navigation mit `/` (Kind), `//` (Nachfahre), `.` (aktuell), `..` (Eltern). Filtern mit `[...]`, z.B. `[@id='x']` (Attribut) oder `[1]` (Position). Werte mit `@attribut` oder `text()`. * **JSONPath (JSON):** Start mit `$`. Navigation mit `.` oder `['key']`. `..` (rekursiv), `[*]` (alle Array-Elemente). Filtern mit `[?(@...)]`, wobei `@` das aktuelle Element ist. **Beispiel**: ```python //course[@id='cds104']/lecturer[@type='external' and units > 5]/name/text() ``` ```json $.movies[?(@.year > 1999 && @.title =~ /^Matrix.*/)].actors[*].name ``` ## HTTP-APIs & Web Crawling * **HTTP-APIs:** Datenaustausch über URLs via REST (Methoden: GET, POST, etc.), oft mit API-Key zur Authentifizierung. * **Web Scraping/Crawling:** Extrahiert Daten aus HTML. Auswahl mit CSS-Selektoren (z.B. `tag`, `.klasse`, `#id`). Crawler folgen Links (``). Beachte `robots.txt` und nutze `sitemap.xml`. ```css main#content article.published:not(.featured) h2 + div.meta a[href*="author"] ```