{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 12. Übungsblatt\n",
    "\n",
    "Mit diesem Python-Code können Sie Ihren regulären Ausdruck testen:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import re\n",
    "\n",
    "\"\"\"\n",
    "Ändern Sie den folgenden regulären Ausdruck, so dass alle \n",
    "positiven Muster erkannt werden, aber kein negatives Muster.\n",
    "\"\"\"\n",
    "muster = re.compile(\"Z\") \n",
    "positive = [\n",
    "    \"rap them\",\n",
    "    \"tapeth\",\n",
    "    \"apth\",\n",
    "    \"wrap/try\",\n",
    "    \"sap tray\",\n",
    "    \"87ap9th\",\n",
    "    \"apothecary\"\n",
    "]\n",
    "\n",
    "negative = [\n",
    "    \"aleht\",\n",
    "    \"happy them\",\n",
    "    \"tarpth\",\n",
    "    \"Apt\",\n",
    "    \"peth\",\n",
    "    \"tarreth\",\n",
    "    \"ddapdg\",\n",
    "    \"apples\",\n",
    "    \"shape the\"\n",
    "]\n",
    "\n",
    "# testen, ob alle positiven Muster richtig erkannt werden\n",
    "positive_not_matched = [s for s in positive if not muster.findall(s)]\n",
    "if positive_not_matched:\n",
    "    print(\"Folgende positiven Muster wurden nicht erkannt:\", \", \".join(positive_not_matched))\n",
    "\n",
    "# testen, ob keine negativen Muster erkannt werden\n",
    "negative_matched = [s for s in negative if muster.findall(s)]\n",
    "if negative_matched:\n",
    "    print(\"Folgende negativen Muster wurden erkannt:\", \", \".join(negative_matched))\n",
    "\n",
    "if not positive_not_matched and not negative_matched:\n",
    "    print(\"Herzlichen Glückwunsch, Sie haben das richtige Muster gefunden!\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nachfolgend noch einige Beispiele zur Verwendung von regulären Ausdrücke mit Python:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Funktionen für reguläre Ausdrücke werden im Modul \"re\" bereitgestellt\n",
    "import re\n",
    "\n",
    "# die Methode \"findall\" findet alle Teilzeichenketten in einer Zeichenkette,\n",
    "# die auf das angegebene Muster passen \n",
    "re.findall(\"cat|dog\", \"This sentence contains a dog.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# die Methode \"match\" testet, ob die gesamte Zeichenkette auf das angegebene Muster passt \n",
    "re.match(\".*dog\\\\.\", \"This sentence contains a dog.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "re.match(\".*(cat|dog)\", \"This sentence contains a cat.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Mit \"match\" können wir beispielsweise unsere Ergebnisse für Aufgabe 1 prüfen:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "if re.match(\"[hc]?at\", \"cat\"):\n",
    "    print(\"Wort wurde erkannt\")\n",
    "else:\n",
    "    print(\"Wort wurde nicht erkannt\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Es gibt eine umfangreiche eingebaute Hilfe:\n",
    "help(re)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python",
   "pygments_lexer": "ipython3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}