{
    "componentChunkName": "component---src-templates-course-content-template-js",
    "path": "/osa-12/4-reguljara-uttryck",
    "result": {"data":{"page":{"htmlAst":{"type":"element","tagName":"div","properties":{},"children":[{"type":"element","tagName":"text-box","properties":{"variant":"learningObjectives","name":"Inlärningsmål"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Efter den här delen"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Vet du vad reguljära uttryck är"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Kommer du att kunna använda reguljära uttryck i dina egna program"}]},{"type":"text","value":"\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Vi har redan konstaterat att Python är en utmärkt miljö för att bearbeta text. Ett ytterligare kraftfullt verktyg för textbehandling är reguljära uttryck (eng. regular expressions), ofta förkortat som regex eller regexp. De är ett sätt att välja ut och söka efter strängar som följer ett visst mönster. I det här avsnittet får du en introduktion till grunderna i reguljära uttryck, men du hittar mycket mer information på nätet, bland annat i Pythons egna "},{"type":"element","tagName":"a","properties":{"href":"https://docs.python.org/3/howto/regex.html","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"handledning"}]},{"type":"text","value":"."}]},{"type":"element","tagName":"h2","properties":{"id":"vad-ar-reguljara-uttryck","style":"position:relative;"},"children":[{"type":"text","value":"Vad är reguljära uttryck?"},{"type":"element","tagName":"a","properties":{"href":"#vad-ar-reguljara-uttryck","ariaLabel":"vad ar reguljara uttryck permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Reguljära uttryck är inte bara en Python-funktion. De representerar på sätt och vis ett programmeringsspråk inom ett programmeringsspråk. De är i viss utsträckning kompatibla med många olika programmeringsspråk. Reguljära uttryck har sin egen specifika syntax. Tanken är att definiera en samling strängar som följer vissa regler."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Låt oss börja med ett enkelt exempel innan vi dyker djupare in i syntaxen:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"import"}]},{"type":"text","value":" re\n\norden "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Python\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Population\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Pantomi\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Perfekt\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Prestation\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"ord"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" orden"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# Ifall strängen börjar med \"P\" och slutar med \"on\""}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" re"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"search"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"^P.*on$\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"ord"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"ord"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"hittad!\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Python hittad!\nPopulation hittad!\nPrestation hittad!"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Vi behöver importera modulen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"re"}]},{"type":"text","value":" för att kunna använda reguljära uttryck i Python. Modulen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"re"}]},{"type":"text","value":" innehåller många funktioner för att arbeta med reguljära uttryck. I exemplet ovan tar "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"search"}]},{"type":"text","value":"-funktionen två strängargument: mönstersträngen och den målsträng där mönstret ska sökas."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I det här andra exemplet letar man efter alla siffror i en sträng. Funktionen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"findall"}]},{"type":"text","value":" returnerar en lista över alla instanser som matchar mönstret:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"import"}]},{"type":"text","value":" re\n\nmening "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Först, 2 !#tredje 44 fem 678xyz962\""}]},{"type":"text","value":"\n\nnumren "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" re"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"findall"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"\\d+\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" mening"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"for"}]},{"type":"text","value":" nummer "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"in"}]},{"type":"text","value":" numren"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"nummer"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"2\n44\n678\n962"}]}]},{"type":"element","tagName":"h2","properties":{"id":"syntaxen-for-reguljara-uttryck","style":"position:relative;"},"children":[{"type":"text","value":"Syntaxen för reguljära uttryck"},{"type":"element","tagName":"a","properties":{"href":"#syntaxen-for-reguljara-uttryck","ariaLabel":"syntaxen for reguljara uttryck permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Låt oss bekanta oss med den grundläggande syntaxen för reguljära uttryck. De flesta av följande exempel använder sig av detta testprogram:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"import"}]},{"type":"text","value":" re\n\nuttryck "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"input"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Ange uttryck: \""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"while"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","boolean"]},"children":[{"type":"text","value":"True"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n    strang "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin"]},"children":[{"type":"text","value":"input"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Ange sträng: \""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" strang "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"=="}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"break"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"if"}]},{"type":"text","value":" re"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":"search"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"uttryck"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":" strang"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Hittad!\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"else"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Hittades inte.\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"h3","properties":{"id":"alternativa-delstrangar","style":"position:relative;"},"children":[{"type":"text","value":"Alternativa delsträngar"},{"type":"element","tagName":"a","properties":{"href":"#alternativa-delstrangar","ariaLabel":"alternativa delstrangar permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Lodstrecket (eng. vertical bar) "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"|"}]},{"type":"text","value":", gör att du kan matcha alternativa delsträngar. Dess betydelse är alltså eller. Uttrycket "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"911|112"}]},{"type":"text","value":" matchar t.ex. strängar som innehåller antingen delsträngen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"911"}]},{"type":"text","value":" eller delsträngen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"112"}]},{"type":"text","value":"."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ett exempel med testprogrammet:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ange uttryck: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"aa|ee|ii"}]},{"type":"text","value":"\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"kassaaparat"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"beteende"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"friidrott"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"kooperation"}]},{"type":"text","value":"\nHittades inte.\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"bastuugn"}]},{"type":"text","value":"\nHittades inte."}]}]},{"type":"element","tagName":"h3","properties":{"id":"grupper-av-tecken","style":"position:relative;"},"children":[{"type":"text","value":"Grupper av tecken"},{"type":"element","tagName":"a","properties":{"href":"#grupper-av-tecken","ariaLabel":"grupper av tecken permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Hakparenteser används för att beteckna grupper av accepterade tecken. Uttrycket "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"[aeio]"}]},{"type":"text","value":" skulle t.ex. matcha alla strängar som innehåller något av tecknen a, e, i eller o."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ett bindestreck är också tillåtet för att matcha intervall av tecken. Uttrycket "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"[0-68a-d]"}]},{"type":"text","value":" skulle till exempel matcha alla strängar som innehåller en siffra mellan 0 och 6, eller en åtta, eller ett tecken mellan a och d. I den här notationen är alla intervall inkluderande."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Om du kombinerar två uppsättningar parenteser kan du matcha två tecken i följd. Till exempel skulle uttrycket "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"[1-3][0-9]"}]},{"type":"text","value":" matcha alla tvåsiffriga tal mellan 10 och 39, inklusive."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ett exempel med testprogrammet:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ange uttryck: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"[C-FRSÖ]"}]},{"type":"text","value":"\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"C"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"E"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"G"}]},{"type":"text","value":"\nHittades inte.\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"R"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Ö"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"T"}]},{"type":"text","value":"\nHittades inte."}]}]},{"type":"element","tagName":"h3","properties":{"id":"upprepade-matchningar","style":"position:relative;"},"children":[{"type":"text","value":"Upprepade matchningar"},{"type":"element","tagName":"a","properties":{"href":"#upprepade-matchningar","ariaLabel":"upprepade matchningar permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Varje del av ett uttryck kan upprepas med följande operatorer:"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"*"}]},{"type":"text","value":" upprepas hur många gånger som helst, inklusive noll"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"+"}]},{"type":"text","value":" upprepas hur många gånger som helst, men minst en gång"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"{m}"}]},{"type":"text","value":" upprepas exakt "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"m"}]},{"type":"text","value":" gånger"}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Dessa operatorer fungerar på den del av uttrycket som kommer omedelbart före operatorn. Uttrycket "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"ba+b"}]},{"type":"text","value":" skulle t.ex. matcha delsträngarna "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"bab"}]},{"type":"text","value":", "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"baab"}]},{"type":"text","value":" och "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"baaaaaaaaaaab"}]},{"type":"text","value":", bland andra. Uttrycket "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"A[BCDE]*Z"}]},{"type":"text","value":" skulle matcha delsträngarna "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"AZ"}]},{"type":"text","value":", "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"ADZ"}]},{"type":"text","value":" eller "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"ABCDEBCDEBCDEZ"}]},{"type":"text","value":", bland andra."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ett exempel med testprogrammet:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ange uttryck: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"1[234]*5"}]},{"type":"text","value":"\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"15"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"125"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"145"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"12342345"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"126"}]},{"type":"text","value":"\nHittades inte.\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"165"}]},{"type":"text","value":"\nHittades inte."}]}]},{"type":"element","tagName":"h3","properties":{"id":"andra-specialtecken","style":"position:relative;"},"children":[{"type":"text","value":"Andra specialtecken"},{"type":"element","tagName":"a","properties":{"href":"#andra-specialtecken","ariaLabel":"andra specialtecken permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"En punkt är ett jokertecken som kan matcha vilket enskilt tecken som helst. Uttrycket "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"c...o"}]},{"type":"text","value":" skulle till exempel matcha alla delsträngar med fem tecken som börjar med ett "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"c"}]},{"type":"text","value":" och slutar med ett "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"o"}]},{"type":"text","value":", till exempel "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"c-3po"}]},{"type":"text","value":" eller "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"cello"}]},{"type":"text","value":"."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Tecknet "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"^"}]},{"type":"text","value":" anger att matchningen måste ske i början av strängen och "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"$"}]},{"type":"text","value":" anger att matchningen måste ske i slutet av strängen. Dessa tecken kan också användas för att utesluta andra tecken än de angivna från matchningen:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ange uttryck: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"^[123]*$"}]},{"type":"text","value":"\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"4"}]},{"type":"text","value":"\nHittades inte.\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"1221"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"333333333"}]},{"type":"text","value":"\nHittad!"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ibland behöver du matcha för specialtecken som är reserverade för syntaxen för reguljära uttryck. Omvänt snedstreck (eng. backslash) "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"\\"}]},{"type":"text","value":" kan användas för att undkomma specialtecken. Uttrycket "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"1+"}]},{"type":"text","value":" matchar alltså ett eller flera tal "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"1"}]},{"type":"text","value":", men uttrycket "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"1\\+"}]},{"type":"text","value":" matchar strängen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"1+"}]},{"type":"text","value":"."}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ange uttryck: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"^\\*"}]},{"type":"text","value":"\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"hej*"}]},{"type":"text","value":"\nHittades inte.\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"h*e*j"}]},{"type":"text","value":"\nHittades inte.\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"*hej"}]},{"type":"text","value":"\nHittad!"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Runda parenteser kan användas för att gruppera ihop olika delar av uttrycket. Till exempel skulle uttrycket "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"(ab)+c"}]},{"type":"text","value":" matcha delsträngarna "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"abc"}]},{"type":"text","value":", "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"ababc"}]},{"type":"text","value":" och "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"abababababababc"}]},{"type":"text","value":", men inte strängarna "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"ac"}]},{"type":"text","value":" eller "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"bc"}]},{"type":"text","value":", eftersom hela delsträngen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"ab"}]},{"type":"text","value":" måste förekomma minst en gång."}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ange uttryck: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"^(jabba).*(hut)$"}]},{"type":"text","value":"\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"jabba the hut"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"jabba a hut"}]},{"type":"text","value":"\nHittad!\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"jarmo the hut"}]},{"type":"text","value":"\nHittades inte.\nAnge sträng: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"jabba the smut"}]},{"type":"text","value":"\nHittades inte."}]}]},{"type":"element","tagName":"programming-exercise","properties":{"name":"Reguljära uttryck","tmcname":"osa12-14_reguljara_uttryck"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Här följer några övningar för att bekanta dig med syntaxen för reguljära uttryck."}]},{"type":"element","tagName":"h2","properties":{"id":"veckodagar","style":"position:relative;"},"children":[{"type":"text","value":"Veckodagar"},{"type":"element","tagName":"a","properties":{"href":"#veckodagar","ariaLabel":"veckodagar permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Använd ett reguljärt uttryck för att skapa en funktion med namnet "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"ar_veckodag(strang: str)"}]},{"type":"text","value":". Funktionen ska returnera "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"True"}]},{"type":"text","value":" om strängen som skickas som argument innehåller en förkortning av en veckodag (mån, tis, ons, tors, fre, lör, sön)."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Exempel på hur funktionen ska fungera"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"ar_veckodag"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"mån\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"ar_veckodag"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"fre\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"ar_veckodag"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"turs\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"True\nTrue\nFalse"}]}]},{"type":"element","tagName":"h2","properties":{"id":"vokalcheck","style":"position:relative;"},"children":[{"type":"text","value":"Vokalcheck"},{"type":"element","tagName":"a","properties":{"href":"#vokalcheck","ariaLabel":"vokalcheck permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa en funktion med namnet "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"alla_vokaler(strang: str)"}]},{"type":"text","value":" som använder ett reguljärt uttryck för att kontrollera om alla tecken i den givna strängen är vokaler."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Exempel på hur funktionen ska fungera:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"alla_vokaler"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"eioueioieoieouyyyy\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"alla_vokaler"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"biiiiil\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"True\nFalse"}]}]},{"type":"element","tagName":"h2","properties":{"id":"klockans-tid","style":"position:relative;"},"children":[{"type":"text","value":"Klockans tid"},{"type":"element","tagName":"a","properties":{"href":"#klockans-tid","ariaLabel":"klockans tid permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa funktionen "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"klocktid(strang: str)"}]},{"type":"text","value":", som använder ett reguljärt uttryck för att granska ifall en sträng av formatet "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"tt:mm:ss"}]},{"type":"text","value":" är en giltig tid i ett 24-timmars format, med två siffror var för timmar, minuter och sekunder."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Exempel på hur funktionen ska fungera:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"python"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-python"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"klocktid"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"12:43:01\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"klocktid"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"AB:01:CD\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"klocktid"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"17:59:59\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","keyword"]},"children":[{"type":"text","value":"print"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"text","value":"klocktid"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"33:66:77\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]}]}]}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"True\nFalse\nTrue\nFalse"}]}]}]},{"type":"element","tagName":"h2","properties":{"id":"den-stora-finalen","style":"position:relative;"},"children":[{"type":"text","value":"Den stora finalen"},{"type":"element","tagName":"a","properties":{"href":"#den-stora-finalen","ariaLabel":"den stora finalen permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Som avslutning på denna del av materialet ska vi arbeta lite mer med objekt och klasser genom att bygga ett lite mer omfattande program. Denna övning innefattar inte nödvändigtvis reguljära uttryck, men avsnitten om "},{"type":"element","tagName":"a","properties":{"href":"https://rage.github.io/ohjelmointi-24-sv/osa-12/1-funktioner-som-argument","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"Funktioner som argument "}]},{"type":"text","value":" och "},{"type":"element","tagName":"a","properties":{"href":"https://rage.github.io/ohjelmointi-24-sv/osa-11/1-list-comprehension","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"list comprehension"}]},{"type":"text","value":" kommer sannolikt att vara användbara."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Du kan också ha nytta av de exempel som finns i "},{"type":"element","tagName":"a","properties":{"href":"https://rage.github.io/ohjelmointi-24-sv/osa-10/4-storre-applikation","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"modul 10"}]},{"type":"text","value":"."}]},{"type":"element","tagName":"programming-exercise","properties":{"name":"Statistik i ordning","tmcname":"osa12-15_statistik_i_ordning"},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I den här övningen kommer du att bygga en applikation för att undersöka hockeyligastatistik från NHL på ett par olika sätt."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Övningsmallen innehåller två JSON-filer: del.json och alla.json. Den första av dessa är mest avsedd för testning. Den senare innehåller en hel del data, eftersom all NHL-spelarstatistik för säsongen 2019-20 ingår i filen."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Inlägget för en enskild spelare är i följande format:"}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"json"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-json"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-json"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","property"]},"children":[{"type":"text","value":"\"name\""}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"Patrik Laine\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","property"]},"children":[{"type":"text","value":"\"nationality\""}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"FIN\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","property"]},"children":[{"type":"text","value":"\"assists\""}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"35"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","property"]},"children":[{"type":"text","value":"\"goals\""}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"28"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","property"]},"children":[{"type":"text","value":"\"penalties\""}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"22"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","property"]},"children":[{"type":"text","value":"\"team\""}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\"WPG\""}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"span","properties":{"className":["token","property"]},"children":[{"type":"text","value":"\"games\""}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":":"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","number"]},"children":[{"type":"text","value":"68"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":","}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Båda filerna innehållar en lista av inlägg enligt ovanstående format."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Ifall du behöver en uppfriskare när det gäller hantering av JOSN-filer, kan du ta en titt på "},{"type":"element","tagName":"a","properties":{"href":"https://rage.github.io/ohjelmointi-24-sv/osa-7/4-behandla-data","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"modul 7 i kursmaterialet"}]},{"type":"text","value":"."}]},{"type":"element","tagName":"h2","properties":{"id":"sok-och-lista","style":"position:relative;"},"children":[{"type":"text","value":"Sök och lista"},{"type":"element","tagName":"a","properties":{"href":"#sok-och-lista","ariaLabel":"sok och lista permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Skapa en interaktiv applikation som först frågar efter namnet på filen och sedan erbjuder följande funktioner:"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"sök enligt namn för en enskild spelares statistik"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"lista alla förkortningar för lagnamn i alfabetisk ordning"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"lista alla förkortningar för länder i alfabetisk ordning"}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Dessa funktioner ger dig totalt ett övningspoäng. Din applikation ska nu fungera enligt följande:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"fil: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"del.json"}]},{"type":"text","value":"\nläste 14 spelares data"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktioner:\n0 avsluta\n1 sök spelare\n2 lag\n3 länder\n4 lagets spelare\n5 landets spelare\n6 flest poäng\n7 flest mål"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktion: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"1"}]},{"type":"text","value":"\nnamn: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Travis Zajac"}]}]},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"Travis Zajac         NJD   9 + 16 =  25\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktion: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"2"}]},{"type":"text","value":"\nBUF\nCGY\nDAL\nNJD\nNYI\nOTT\nPIT\nWPG\nWSH"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktion: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"3"}]},{"type":"text","value":"\nCAN\nCHE\nCZE\nSWE\nUSA"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktion: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"0"}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Obs: Utskriftens format för en spelare måste vara exakt enligt följande:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"Leon Draisaitl       EDM  43 + 67 = 110\nConnor McDavid       EDM  34 + 63 =  97\nTravis Zajac         NJD   9 + 16 =  25\nMike Green           EDM   3 +  8 =  11\nMarkus Granlund      EDM   3 +  1 =   4\n123456789012345678901234567890123456789\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Den sista raden i exemplet ovan är till för att hjälpa dig att beräkna bredden på de olika fälten i utskriften; du ska inte skriva ut nummerraden själv i din slutliga inlämning."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Förkortningen för teamet skrivs ut från det 22:a tecknet och framåt. "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"+"}]},{"type":"text","value":"-tecknet är det 30:e tecknet och "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"="}]},{"type":"text","value":"-tecknet är det 35:e tecknet. Alla fält ska vara justifierade till högerkanten. Alla blanksteg är mellanslagstecken."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"F-strängar är förmodligen det enklaste sättet att uppnå den önskade utskriften. Processen är liknande som övningen Kursresultat del 3 från "},{"type":"element","tagName":"a","properties":{"href":"https://rage.github.io/ohjelmointi-24-sv/osa-6/1-lasa-filer","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"modul 6"}]},{"type":"text","value":"."}]},{"type":"element","tagName":"h2","properties":{"id":"lista-spelare-enligt-poang","style":"position:relative;"},"children":[{"type":"text","value":"Lista spelare enligt poäng"},{"type":"element","tagName":"a","properties":{"href":"#lista-spelare-enligt-poang","ariaLabel":"lista spelare enligt poang permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Följande funktionalitet ger dig ditt andra övningspoäng:"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"lista spelare i ett specifikt lag enligt ordningen flest poäng, från högst till lägst. Poäng är mängden "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"mål"}]},{"type":"text","value":" + "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"assistanser"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"lista spelare från ett specifikt land enligt ordningen flest poäng, från högst till lägst"}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Din applikation ska nu fungera enligt följande:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"fil: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"del.json"}]},{"type":"text","value":"\nläste 14 spelares data"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktioner:\n0 avsluta\n1 sök spelare\n2 lag\n3 länder\n4 lagets spelare\n5 landets spelare\n6 flest poäng\n7 flest mål"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktion: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"4"}]},{"type":"text","value":"\nlag: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"OTT"}]}]},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"Drake Batherson      OTT   3 +  7 =  10\nJonathan Davidsson   OTT   0 +  1 =   1\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktion: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"5"}]},{"type":"text","value":"\nland: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"CAN"}]}]},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"Jared McCann         PIT  14 + 21 =  35\nTravis Zajac         NJD   9 + 16 =  25\nTaylor Fedun         DAL   2 +  7 =   9\nMark Jankowski       CGY   5 +  2 =   7\nLogan Shaw           WPG   3 +  2 =   5\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktion: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"0"}]}]}]},{"type":"element","tagName":"h2","properties":{"id":"mest-framgangsrika-spelare","style":"position:relative;"},"children":[{"type":"text","value":"Mest framgångsrika spelare"},{"type":"element","tagName":"a","properties":{"href":"#mest-framgangsrika-spelare","ariaLabel":"mest framgangsrika spelare permalink","className":["anchor","after"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Det tredje övningspoänget får du från följande två funktionaliteter:"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"lista av "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"n"}]},{"type":"text","value":" mängd spelare som fått flest poäng\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"ifall två spelare har samma mängd poäng, ska den som har flera mål komma först"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"lista av "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"n"}]},{"type":"text","value":" mängd spelare som har gjort flest mål\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"ifall två spelare har samma mängd mål, ska den som spelat färre spel komma först"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Applikationen ska nu fungera enligt följande:"}]},{"type":"element","tagName":"sample-output","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"fil: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"del.json"}]},{"type":"text","value":"\nläste 14 spelares data"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktioner:\n0 avsluta\n1 sök spelare\n2 lag\n3 länder\n4 lagets spelare\n5 landets spelare\n6 flest poäng\n7 flest mål"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktion: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"6"}]},{"type":"text","value":"\nhur många: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"2"}]}]},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"Jakub Vrana          WSH  25 + 27 =  52\nJared McCann         PIT  14 + 21 =  35\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktion: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"6"}]},{"type":"text","value":"\nhur många: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"5"}]}]},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"Jakub Vrana          WSH  25 + 27 =  52\nJared McCann         PIT  14 + 21 =  35\nJohn Klingberg       DAL   6 + 26 =  32\nTravis Zajac         NJD   9 + 16 =  25\nConor Sheary         BUF  10 + 13 =  23\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktion: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"7"}]},{"type":"text","value":"\nhur många: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"6"}]}]},{"type":"element","tagName":"pre","properties":{},"children":[{"type":"text","value":"Jakub Vrana          WSH  25 + 27 =  52\nJared McCann         PIT  14 + 21 =  35\nConor Sheary         BUF  10 + 13 =  23\nTravis Zajac         NJD   9 + 16 =  25\nJohn Klingberg       DAL   6 + 26 =  32\nMark Jankowski       CGY   5 +  2 =   7\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"instruktion: "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"0"}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Svara till sist på en snabb enkät:"}]},{"type":"element","tagName":"div","properties":{},"children":[{"type":"element","tagName":"quiz","properties":{"id":"0b8ac652-d805-558a-a07a-dfa5aa91ae95"},"children":[]}]}]},"html":"<div><text-box variant='learningObjectives' name='Inlärningsmål'><p>Efter den här delen</p><ul>\n<li>Vet du vad reguljära uttryck är</li>\n<li>Kommer du att kunna använda reguljära uttryck i dina egna program</li>\n</ul></text-box><p>Vi har redan konstaterat att Python är en utmärkt miljö för att bearbeta text. Ett ytterligare kraftfullt verktyg för textbehandling är reguljära uttryck (eng. regular expressions), ofta förkortat som regex eller regexp. De är ett sätt att välja ut och söka efter strängar som följer ett visst mönster. I det här avsnittet får du en introduktion till grunderna i reguljära uttryck, men du hittar mycket mer information på nätet, bland annat i Pythons egna <a href=\"https://docs.python.org/3/howto/regex.html\" target=\"_blank\" rel=\"noopener noreferrer\">handledning</a>.</p><h2 id=\"vad-ar-reguljara-uttryck\" style=\"position:relative;\">Vad är reguljära uttryck?<a href=\"#vad-ar-reguljara-uttryck\" aria-label=\"vad ar reguljara uttryck permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Reguljära uttryck är inte bara en Python-funktion. De representerar på sätt och vis ett programmeringsspråk inom ett programmeringsspråk. De är i viss utsträckning kompatibla med många olika programmeringsspråk. Reguljära uttryck har sin egen specifika syntax. Tanken är att definiera en samling strängar som följer vissa regler.</p><p>Låt oss börja med ett enkelt exempel innan vi dyker djupare in i syntaxen:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> re\n\norden <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"Python\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Population\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Pantomi\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Perfekt\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Prestation\"</span><span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">for</span> <span class=\"token builtin\">ord</span> <span class=\"token keyword\">in</span> orden<span class=\"token punctuation\">:</span>\n    <span class=\"token comment\"># Ifall strängen börjar med \"P\" och slutar med \"on\"</span>\n    <span class=\"token keyword\">if</span> re<span class=\"token punctuation\">.</span>search<span class=\"token punctuation\">(</span><span class=\"token string\">\"^P.*on$\"</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">ord</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">ord</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"hittad!\"</span><span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>Python hittad!\nPopulation hittad!\nPrestation hittad!</p></sample-output><p>Vi behöver importera modulen <code class=\"language-text\">re</code> för att kunna använda reguljära uttryck i Python. Modulen <code class=\"language-text\">re</code> innehåller många funktioner för att arbeta med reguljära uttryck. I exemplet ovan tar <code class=\"language-text\">search</code>-funktionen två strängargument: mönstersträngen och den målsträng där mönstret ska sökas.</p><p>I det här andra exemplet letar man efter alla siffror i en sträng. Funktionen <code class=\"language-text\">findall</code> returnerar en lista över alla instanser som matchar mönstret:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> re\n\nmening <span class=\"token operator\">=</span> <span class=\"token string\">\"Först, 2 !#tredje 44 fem 678xyz962\"</span>\n\nnumren <span class=\"token operator\">=</span> re<span class=\"token punctuation\">.</span>findall<span class=\"token punctuation\">(</span><span class=\"token string\">\"\\d+\"</span><span class=\"token punctuation\">,</span> mening<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> nummer <span class=\"token keyword\">in</span> numren<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>nummer<span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>2\n44\n678\n962</p></sample-output><h2 id=\"syntaxen-for-reguljara-uttryck\" style=\"position:relative;\">Syntaxen för reguljära uttryck<a href=\"#syntaxen-for-reguljara-uttryck\" aria-label=\"syntaxen for reguljara uttryck permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Låt oss bekanta oss med den grundläggande syntaxen för reguljära uttryck. De flesta av följande exempel använder sig av detta testprogram:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> re\n\nuttryck <span class=\"token operator\">=</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Ange uttryck: \"</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">while</span> <span class=\"token boolean\">True</span><span class=\"token punctuation\">:</span>\n    strang <span class=\"token operator\">=</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Ange sträng: \"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> strang <span class=\"token operator\">==</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">break</span>\n    <span class=\"token keyword\">if</span> re<span class=\"token punctuation\">.</span>search<span class=\"token punctuation\">(</span>uttryck<span class=\"token punctuation\">,</span> strang<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hittad!\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hittades inte.\"</span><span class=\"token punctuation\">)</span></code></pre></div><h3 id=\"alternativa-delstrangar\" style=\"position:relative;\">Alternativa delsträngar<a href=\"#alternativa-delstrangar\" aria-label=\"alternativa delstrangar permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h3><p>Lodstrecket (eng. vertical bar) <code class=\"language-text\">|</code>, gör att du kan matcha alternativa delsträngar. Dess betydelse är alltså eller. Uttrycket <code class=\"language-text\">911|112</code> matchar t.ex. strängar som innehåller antingen delsträngen <code class=\"language-text\">911</code> eller delsträngen <code class=\"language-text\">112</code>.</p><p>Ett exempel med testprogrammet:</p><sample-output><p>Ange uttryck: <strong>aa|ee|ii</strong>\nAnge sträng: <strong>kassaaparat</strong>\nHittad!\nAnge sträng: <strong>beteende</strong>\nHittad!\nAnge sträng: <strong>friidrott</strong>\nHittad!\nAnge sträng: <strong>kooperation</strong>\nHittades inte.\nAnge sträng: <strong>bastuugn</strong>\nHittades inte.</p></sample-output><h3 id=\"grupper-av-tecken\" style=\"position:relative;\">Grupper av tecken<a href=\"#grupper-av-tecken\" aria-label=\"grupper av tecken permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h3><p>Hakparenteser används för att beteckna grupper av accepterade tecken. Uttrycket <code class=\"language-text\">[aeio]</code> skulle t.ex. matcha alla strängar som innehåller något av tecknen a, e, i eller o.</p><p>Ett bindestreck är också tillåtet för att matcha intervall av tecken. Uttrycket <code class=\"language-text\">[0-68a-d]</code> skulle till exempel matcha alla strängar som innehåller en siffra mellan 0 och 6, eller en åtta, eller ett tecken mellan a och d. I den här notationen är alla intervall inkluderande.</p><p>Om du kombinerar två uppsättningar parenteser kan du matcha två tecken i följd. Till exempel skulle uttrycket <code class=\"language-text\">[1-3][0-9]</code> matcha alla tvåsiffriga tal mellan 10 och 39, inklusive.</p><p>Ett exempel med testprogrammet:</p><sample-output><p>Ange uttryck: <strong>[C-FRSÖ]</strong>\nAnge sträng: <strong>C</strong>\nHittad!\nAnge sträng: <strong>E</strong>\nHittad!\nAnge sträng: <strong>G</strong>\nHittades inte.\nAnge sträng: <strong>R</strong>\nHittad!\nAnge sträng: <strong>Ö</strong>\nHittad!\nAnge sträng: <strong>T</strong>\nHittades inte.</p></sample-output><h3 id=\"upprepade-matchningar\" style=\"position:relative;\">Upprepade matchningar<a href=\"#upprepade-matchningar\" aria-label=\"upprepade matchningar permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h3><p>Varje del av ett uttryck kan upprepas med följande operatorer:</p><ul>\n<li><code class=\"language-text\">*</code> upprepas hur många gånger som helst, inklusive noll</li>\n<li><code class=\"language-text\">+</code> upprepas hur många gånger som helst, men minst en gång</li>\n<li><code class=\"language-text\">{m}</code> upprepas exakt <code class=\"language-text\">m</code> gånger</li>\n</ul><p>Dessa operatorer fungerar på den del av uttrycket som kommer omedelbart före operatorn. Uttrycket <code class=\"language-text\">ba+b</code> skulle t.ex. matcha delsträngarna <code class=\"language-text\">bab</code>, <code class=\"language-text\">baab</code> och <code class=\"language-text\">baaaaaaaaaaab</code>, bland andra. Uttrycket <code class=\"language-text\">A[BCDE]*Z</code> skulle matcha delsträngarna <code class=\"language-text\">AZ</code>, <code class=\"language-text\">ADZ</code> eller <code class=\"language-text\">ABCDEBCDEBCDEZ</code>, bland andra.</p><p>Ett exempel med testprogrammet:</p><sample-output><p>Ange uttryck: <strong>1[234]*5</strong>\nAnge sträng: <strong>15</strong>\nHittad!\nAnge sträng: <strong>125</strong>\nHittad!\nAnge sträng: <strong>145</strong>\nHittad!\nAnge sträng: <strong>12342345</strong>\nHittad!\nAnge sträng: <strong>126</strong>\nHittades inte.\nAnge sträng: <strong>165</strong>\nHittades inte.</p></sample-output><h3 id=\"andra-specialtecken\" style=\"position:relative;\">Andra specialtecken<a href=\"#andra-specialtecken\" aria-label=\"andra specialtecken permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h3><p>En punkt är ett jokertecken som kan matcha vilket enskilt tecken som helst. Uttrycket <code class=\"language-text\">c...o</code> skulle till exempel matcha alla delsträngar med fem tecken som börjar med ett <code class=\"language-text\">c</code> och slutar med ett <code class=\"language-text\">o</code>, till exempel <code class=\"language-text\">c-3po</code> eller <code class=\"language-text\">cello</code>.</p><p>Tecknet <code class=\"language-text\">^</code> anger att matchningen måste ske i början av strängen och <code class=\"language-text\">$</code> anger att matchningen måste ske i slutet av strängen. Dessa tecken kan också användas för att utesluta andra tecken än de angivna från matchningen:</p><sample-output><p>Ange uttryck: <strong>^[123]*$</strong>\nAnge sträng: <strong>4</strong>\nHittades inte.\nAnge sträng: <strong>1221</strong>\nHittad!\nAnge sträng: <strong>333333333</strong>\nHittad!</p></sample-output><p>Ibland behöver du matcha för specialtecken som är reserverade för syntaxen för reguljära uttryck. Omvänt snedstreck (eng. backslash) <code class=\"language-text\">\\</code> kan användas för att undkomma specialtecken. Uttrycket <code class=\"language-text\">1+</code> matchar alltså ett eller flera tal <code class=\"language-text\">1</code>, men uttrycket <code class=\"language-text\">1\\+</code> matchar strängen <code class=\"language-text\">1+</code>.</p><sample-output><p>Ange uttryck: <strong>^\\*</strong>\nAnge sträng: <strong>hej*</strong>\nHittades inte.\nAnge sträng: <strong>h*e*j</strong>\nHittades inte.\nAnge sträng: <strong>*hej</strong>\nHittad!</p></sample-output><p>Runda parenteser kan användas för att gruppera ihop olika delar av uttrycket. Till exempel skulle uttrycket <code class=\"language-text\">(ab)+c</code> matcha delsträngarna <code class=\"language-text\">abc</code>, <code class=\"language-text\">ababc</code> och <code class=\"language-text\">abababababababc</code>, men inte strängarna <code class=\"language-text\">ac</code> eller <code class=\"language-text\">bc</code>, eftersom hela delsträngen <code class=\"language-text\">ab</code> måste förekomma minst en gång.</p><sample-output><p>Ange uttryck: <strong>^(jabba).*(hut)$</strong>\nAnge sträng: <strong>jabba the hut</strong>\nHittad!\nAnge sträng: <strong>jabba a hut</strong>\nHittad!\nAnge sträng: <strong>jarmo the hut</strong>\nHittades inte.\nAnge sträng: <strong>jabba the smut</strong>\nHittades inte.</p></sample-output><programming-exercise name='Reguljära uttryck' tmcname='osa12-14_reguljara_uttryck'><p>Här följer några övningar för att bekanta dig med syntaxen för reguljära uttryck.</p><h2 id=\"veckodagar\" style=\"position:relative;\">Veckodagar<a href=\"#veckodagar\" aria-label=\"veckodagar permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Använd ett reguljärt uttryck för att skapa en funktion med namnet <code class=\"language-text\">ar_veckodag(strang: str)</code>. Funktionen ska returnera <code class=\"language-text\">True</code> om strängen som skickas som argument innehåller en förkortning av en veckodag (mån, tis, ons, tors, fre, lör, sön).</p><p>Exempel på hur funktionen ska fungera</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>ar_veckodag<span class=\"token punctuation\">(</span><span class=\"token string\">\"mån\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>ar_veckodag<span class=\"token punctuation\">(</span><span class=\"token string\">\"fre\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>ar_veckodag<span class=\"token punctuation\">(</span><span class=\"token string\">\"turs\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>True\nTrue\nFalse</p></sample-output><h2 id=\"vokalcheck\" style=\"position:relative;\">Vokalcheck<a href=\"#vokalcheck\" aria-label=\"vokalcheck permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Skapa en funktion med namnet <code class=\"language-text\">alla_vokaler(strang: str)</code> som använder ett reguljärt uttryck för att kontrollera om alla tecken i den givna strängen är vokaler.</p><p>Exempel på hur funktionen ska fungera:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>alla_vokaler<span class=\"token punctuation\">(</span><span class=\"token string\">\"eioueioieoieouyyyy\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>alla_vokaler<span class=\"token punctuation\">(</span><span class=\"token string\">\"biiiiil\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>True\nFalse</p></sample-output><h2 id=\"klockans-tid\" style=\"position:relative;\">Klockans tid<a href=\"#klockans-tid\" aria-label=\"klockans tid permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Skapa funktionen <code class=\"language-text\">klocktid(strang: str)</code>, som använder ett reguljärt uttryck för att granska ifall en sträng av formatet <code class=\"language-text\">tt:mm:ss</code> är en giltig tid i ett 24-timmars format, med två siffror var för timmar, minuter och sekunder.</p><p>Exempel på hur funktionen ska fungera:</p><div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>klocktid<span class=\"token punctuation\">(</span><span class=\"token string\">\"12:43:01\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>klocktid<span class=\"token punctuation\">(</span><span class=\"token string\">\"AB:01:CD\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>klocktid<span class=\"token punctuation\">(</span><span class=\"token string\">\"17:59:59\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>klocktid<span class=\"token punctuation\">(</span><span class=\"token string\">\"33:66:77\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div><sample-output><p>True\nFalse\nTrue\nFalse</p></sample-output></programming-exercise><h2 id=\"den-stora-finalen\" style=\"position:relative;\">Den stora finalen<a href=\"#den-stora-finalen\" aria-label=\"den stora finalen permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Som avslutning på denna del av materialet ska vi arbeta lite mer med objekt och klasser genom att bygga ett lite mer omfattande program. Denna övning innefattar inte nödvändigtvis reguljära uttryck, men avsnitten om <a href=\"https://rage.github.io/ohjelmointi-24-sv/osa-12/1-funktioner-som-argument\" target=\"_blank\" rel=\"noopener noreferrer\">Funktioner som argument </a> och <a href=\"https://rage.github.io/ohjelmointi-24-sv/osa-11/1-list-comprehension\" target=\"_blank\" rel=\"noopener noreferrer\">list comprehension</a> kommer sannolikt att vara användbara.</p><p>Du kan också ha nytta av de exempel som finns i <a href=\"https://rage.github.io/ohjelmointi-24-sv/osa-10/4-storre-applikation\" target=\"_blank\" rel=\"noopener noreferrer\">modul 10</a>.</p><programming-exercise name='Statistik i ordning' tmcname='osa12-15_statistik_i_ordning'><p>I den här övningen kommer du att bygga en applikation för att undersöka hockeyligastatistik från NHL på ett par olika sätt.</p><p>Övningsmallen innehåller två JSON-filer: del.json och alla.json. Den första av dessa är mest avsedd för testning. Den senare innehåller en hel del data, eftersom all NHL-spelarstatistik för säsongen 2019-20 ingår i filen.</p><p>Inlägget för en enskild spelare är i följande format:</p><div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Patrik Laine\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"nationality\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"FIN\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"assists\"</span><span class=\"token operator\">:</span> <span class=\"token number\">35</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"goals\"</span><span class=\"token operator\">:</span> <span class=\"token number\">28</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"penalties\"</span><span class=\"token operator\">:</span> <span class=\"token number\">22</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"team\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"WPG\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"games\"</span><span class=\"token operator\">:</span> <span class=\"token number\">68</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span></code></pre></div><p>Båda filerna innehållar en lista av inlägg enligt ovanstående format.</p><p>Ifall du behöver en uppfriskare när det gäller hantering av JOSN-filer, kan du ta en titt på <a href=\"https://rage.github.io/ohjelmointi-24-sv/osa-7/4-behandla-data\" target=\"_blank\" rel=\"noopener noreferrer\">modul 7 i kursmaterialet</a>.</p><h2 id=\"sok-och-lista\" style=\"position:relative;\">Sök och lista<a href=\"#sok-och-lista\" aria-label=\"sok och lista permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Skapa en interaktiv applikation som först frågar efter namnet på filen och sedan erbjuder följande funktioner:</p><ul>\n<li>sök enligt namn för en enskild spelares statistik</li>\n<li>lista alla förkortningar för lagnamn i alfabetisk ordning</li>\n<li>lista alla förkortningar för länder i alfabetisk ordning</li>\n</ul><p>Dessa funktioner ger dig totalt ett övningspoäng. Din applikation ska nu fungera enligt följande:</p><sample-output><p>fil: <strong>del.json</strong>\nläste 14 spelares data</p><p>instruktioner:\n0 avsluta\n1 sök spelare\n2 lag\n3 länder\n4 lagets spelare\n5 landets spelare\n6 flest poäng\n7 flest mål</p><p>instruktion: <strong>1</strong>\nnamn: <strong>Travis Zajac</strong></p><pre>\nTravis Zajac         NJD   9 + 16 =  25\n</pre><p>instruktion: <strong>2</strong>\nBUF\nCGY\nDAL\nNJD\nNYI\nOTT\nPIT\nWPG\nWSH</p><p>instruktion: <strong>3</strong>\nCAN\nCHE\nCZE\nSWE\nUSA</p><p>instruktion: <strong>0</strong></p></sample-output><p>Obs: Utskriftens format för en spelare måste vara exakt enligt följande:</p><sample-output><pre>\nLeon Draisaitl       EDM  43 + 67 = 110\nConnor McDavid       EDM  34 + 63 =  97\nTravis Zajac         NJD   9 + 16 =  25\nMike Green           EDM   3 +  8 =  11\nMarkus Granlund      EDM   3 +  1 =   4\n123456789012345678901234567890123456789\n</pre></sample-output><p>Den sista raden i exemplet ovan är till för att hjälpa dig att beräkna bredden på de olika fälten i utskriften; du ska inte skriva ut nummerraden själv i din slutliga inlämning.</p><p>Förkortningen för teamet skrivs ut från det 22:a tecknet och framåt. <code class=\"language-text\">+</code>-tecknet är det 30:e tecknet och <code class=\"language-text\">=</code>-tecknet är det 35:e tecknet. Alla fält ska vara justifierade till högerkanten. Alla blanksteg är mellanslagstecken.</p><p>F-strängar är förmodligen det enklaste sättet att uppnå den önskade utskriften. Processen är liknande som övningen Kursresultat del 3 från <a href=\"https://rage.github.io/ohjelmointi-24-sv/osa-6/1-lasa-filer\" target=\"_blank\" rel=\"noopener noreferrer\">modul 6</a>.</p><h2 id=\"lista-spelare-enligt-poang\" style=\"position:relative;\">Lista spelare enligt poäng<a href=\"#lista-spelare-enligt-poang\" aria-label=\"lista spelare enligt poang permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Följande funktionalitet ger dig ditt andra övningspoäng:</p><ul>\n<li>lista spelare i ett specifikt lag enligt ordningen flest poäng, från högst till lägst. Poäng är mängden <em>mål</em> + <em>assistanser</em></li>\n<li>lista spelare från ett specifikt land enligt ordningen flest poäng, från högst till lägst</li>\n</ul><p>Din applikation ska nu fungera enligt följande:</p><sample-output><p>fil: <strong>del.json</strong>\nläste 14 spelares data</p><p>instruktioner:\n0 avsluta\n1 sök spelare\n2 lag\n3 länder\n4 lagets spelare\n5 landets spelare\n6 flest poäng\n7 flest mål</p><p>instruktion: <strong>4</strong>\nlag: <strong>OTT</strong></p><pre>\nDrake Batherson      OTT   3 +  7 =  10\nJonathan Davidsson   OTT   0 +  1 =   1\n</pre><p>instruktion: <strong>5</strong>\nland: <strong>CAN</strong></p><pre>\nJared McCann         PIT  14 + 21 =  35\nTravis Zajac         NJD   9 + 16 =  25\nTaylor Fedun         DAL   2 +  7 =   9\nMark Jankowski       CGY   5 +  2 =   7\nLogan Shaw           WPG   3 +  2 =   5\n</pre><p>instruktion: <strong>0</strong></p></sample-output><h2 id=\"mest-framgangsrika-spelare\" style=\"position:relative;\">Mest framgångsrika spelare<a href=\"#mest-framgangsrika-spelare\" aria-label=\"mest framgangsrika spelare permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2><p>Det tredje övningspoänget får du från följande två funktionaliteter:</p><ul>\n<li>lista av <code class=\"language-text\">n</code> mängd spelare som fått flest poäng\n<ul>\n<li>ifall två spelare har samma mängd poäng, ska den som har flera mål komma först</li>\n</ul>\n</li>\n<li>lista av <code class=\"language-text\">n</code> mängd spelare som har gjort flest mål\n<ul>\n<li>ifall två spelare har samma mängd mål, ska den som spelat färre spel komma först</li>\n</ul>\n</li>\n</ul><p>Applikationen ska nu fungera enligt följande:</p><sample-output><p>fil: <strong>del.json</strong>\nläste 14 spelares data</p><p>instruktioner:\n0 avsluta\n1 sök spelare\n2 lag\n3 länder\n4 lagets spelare\n5 landets spelare\n6 flest poäng\n7 flest mål</p><p>instruktion: <strong>6</strong>\nhur många: <strong>2</strong></p><pre>\nJakub Vrana          WSH  25 + 27 =  52\nJared McCann         PIT  14 + 21 =  35\n</pre><p>instruktion: <strong>6</strong>\nhur många: <strong>5</strong></p><pre>\nJakub Vrana          WSH  25 + 27 =  52\nJared McCann         PIT  14 + 21 =  35\nJohn Klingberg       DAL   6 + 26 =  32\nTravis Zajac         NJD   9 + 16 =  25\nConor Sheary         BUF  10 + 13 =  23\n</pre><p>instruktion: <strong>7</strong>\nhur många: <strong>6</strong></p><pre>\nJakub Vrana          WSH  25 + 27 =  52\nJared McCann         PIT  14 + 21 =  35\nConor Sheary         BUF  10 + 13 =  23\nTravis Zajac         NJD   9 + 16 =  25\nJohn Klingberg       DAL   6 + 26 =  32\nMark Jankowski       CGY   5 +  2 =   7\n</pre><p>instruktion: <strong>0</strong></p></sample-output></programming-exercise><p>Svara till sist på en snabb enkät:</p><div><quiz id=\"0b8ac652-d805-558a-a07a-dfa5aa91ae95\"></quiz></div></div>","frontmatter":{"path":"/osa-12/4-reguljara-uttryck","title":"Reguljära uttryck"},"fileAbsolutePath":"/home/runner/work/ohjelmointi-26-sv/ohjelmointi-26-sv/data/osa-12/4-reguljara-uttryck.md"},"allPages":{"edges":[{"node":{"id":"3823106d-d5b4-54fc-ab67-c9717c628c00","frontmatter":{"path":"/","title":"Info om kursen"}}},{"node":{"id":"dd7e5652-0011-5cc2-8a7c-c07fca8a56ba","frontmatter":{"path":"/bedomningar-och-prov","title":"Bedömning och prov"}}},{"node":{"id":"7ee945da-eb70-5822-b337-58f9871c566a","frontmatter":{"path":"/alla-uppgifter","title":"Alla uppgifter"}}},{"node":{"id":"6e80e276-0b56-526e-93d9-5ab8823c6611","frontmatter":{"path":"/frontmatter-guide","title":"Frontmatter-guide"}}},{"node":{"id":"7dadae75-1bf2-549f-bb24-5e00c8421489","frontmatter":{"path":"/stod","title":"Handledning och stöd"}}},{"node":{"id":"b1f9be34-f77d-51c9-83c2-d2d3b1f88e7c","frontmatter":{"path":"/onlinetent","title":"Nättentamen 4.6."}}},{"node":{"id":"4e153253-62e1-5e29-b920-4512181e99a0","frontmatter":{"path":"/onlinetent-ohja","title":"ProgFK onlinetent 28.2.2026"}}},{"node":{"id":"5ba54609-9e23-5f8a-bbb1-3501116bd674","frontmatter":{"path":"/onlinetent-ohpe","title":"ProgGK onlinetent 17.1.2026"}}},{"node":{"id":"15a016f4-0a3d-5ec9-8236-533e57968b89","frontmatter":{"path":"/felanmalningar","title":"Vanliga felmeddelanden"}}},{"node":{"id":"416d07bf-b149-5ede-9d73-ea96ebbe00a2","frontmatter":{"path":"/sanasto","title":"Sanasto"}}},{"node":{"id":"70c6dbee-fa15-5924-a037-5b093295a075","frontmatter":{"path":"/osa-1/1-introduktion","title":"Introduktion"}}},{"node":{"id":"677341cb-d819-5a66-a348-fe483d9d22dd","frontmatter":{"path":"/ofta-stallda-fragar","title":"Ofta ställda frågor"}}},{"node":{"id":"10acce17-6b8d-5a7a-96ef-df73c32033da","frontmatter":{"path":"/osa-1/5-villkorssatser","title":"If-satser"}}},{"node":{"id":"adf0c95e-e532-52ac-acb7-41ecca35f001","frontmatter":{"path":"/osa-1","title":"Modul 1"}}},{"node":{"id":"337cbcae-fea0-535f-a4b7-07d0558220d7","frontmatter":{"path":"/osa-1/4-rakneoperationer","title":"Räkneoperationer"}}},{"node":{"id":"94008673-2d10-5ad1-af95-83b5478b3113","frontmatter":{"path":"/osa-10/1-klasshierarkier","title":"Klasshierarkier"}}},{"node":{"id":"3d48575e-5585-5b61-81ed-fe7585ea7593","frontmatter":{"path":"/osa-10/2-atkamstmodifierare","title":"Åtkomstmodifierare"}}},{"node":{"id":"fd6c2729-204f-5955-84d7-1ee8ed9b243b","frontmatter":{"path":"/osa-10/3-objektorienterade-programmeringstekniker","title":"Objektorienterade programmeringstekniker"}}},{"node":{"id":"648ed3ec-8a44-533a-9b88-7ef8fb7a1314","frontmatter":{"path":"/osa-10/4-storre-applikation","title":"Att utveckla en större applikation"}}},{"node":{"id":"abc32f5b-5700-5a16-b351-3bb0fd9e9b3f","frontmatter":{"path":"/osa-10","title":"Modul 10"}}},{"node":{"id":"b6612d3d-6ef9-5537-b0cf-62a01d4de20e","frontmatter":{"path":"/osa-1/3-mer-om-variabler","title":"Mer om variabler"}}},{"node":{"id":"b4146f07-9889-567c-bb26-315ca8375738","frontmatter":{"path":"/osa-11/1-list-comprehension","title":"Listbyggare"}}},{"node":{"id":"959073ca-1000-5d61-98e3-6a7151d95d71","frontmatter":{"path":"/osa-1/2-info-fran-anvandaren","title":"Information från användaren"}}},{"node":{"id":"a8daa43b-12ea-5482-9768-648407360e5d","frontmatter":{"path":"/osa-11/3-rekursion","title":"Rekursion"}}},{"node":{"id":"4dfa0d82-937f-597e-a323-1ffa57da8548","frontmatter":{"path":"/osa-11/2-mer-om-comprehensions","title":"Mer om listbyggare"}}},{"node":{"id":"848a81c4-fc8c-55cf-99ad-333703ef6d09","frontmatter":{"path":"/osa-11/4-lisaa-esimerkkeja","title":"Fler exempel på rekursion"}}},{"node":{"id":"bd0cfdba-8571-59be-bcfc-b681838806c6","frontmatter":{"path":"/osa-11","title":"Modul 11"}}},{"node":{"id":"d2e288a6-dc52-5b69-b9c9-7c967e3ecd14","frontmatter":{"path":"/osa-12/3-funktionell-programmering","title":"Funktionell programmering"}}},{"node":{"id":"e4a0179a-cac6-5b2f-b1d0-e0db6f5b4339","frontmatter":{"path":"/osa-12/4-reguljara-uttryck","title":"Reguljära uttryck"}}},{"node":{"id":"655d9900-5214-5ba4-88d7-a81fd819b0a0","frontmatter":{"path":"/osa-12","title":"Modul 12"}}},{"node":{"id":"10a6b4aa-f106-50e6-9d72-39e500891fd8","frontmatter":{"path":"/osa-12/2-generatorer","title":"Generatorer"}}},{"node":{"id":"af6df246-f5d2-583d-9f07-5aa9736ff64f","frontmatter":{"path":"/osa-13/1-pygame","title":"Pygame"}}},{"node":{"id":"d7395cb0-da7f-5acf-bf09-fd1035b36e81","frontmatter":{"path":"/osa-13/2-animation","title":"Animation"}}},{"node":{"id":"fef7b1d3-58ba-5d58-8637-0e14a8f584a6","frontmatter":{"path":"/osa-12/1-funktioner-som-argument","title":"Funktioner som argument"}}},{"node":{"id":"bd405169-a47c-5eba-986b-4506b39036ac","frontmatter":{"path":"/osa-13/4-fler-pygame-tekniker","title":"Fler pygame-tekniker"}}},{"node":{"id":"a9357b87-636c-5d96-b46b-bbb6a421f6d0","frontmatter":{"path":"/osa-13/3-handelser","title":"Händelser"}}},{"node":{"id":"78b8d6cc-7e14-5090-b43c-1513e8069e0c","frontmatter":{"path":"/osa-13","title":"Modul 13"}}},{"node":{"id":"5f9e405b-ae8f-5181-b1ae-ff2f4e6ad6da","frontmatter":{"path":"/osa-14/1-spelprojekt","title":"Spelprojekt"}}},{"node":{"id":"6e0e1b55-3ed4-56a8-9580-cd451bb7edde","frontmatter":{"path":"/osa-14/2-robot-och-ladar","title":"Robot och lådor"}}},{"node":{"id":"7f22ddd1-54e5-548f-b8d1-07863a79e2df","frontmatter":{"path":"/osa-14","title":"Modul 14"}}},{"node":{"id":"fea4657b-129f-5bb5-8645-17f84341e4b6","frontmatter":{"path":"/osa-2/1-terminologi","title":"Programmeringsterminologi"}}},{"node":{"id":"8c86392d-05ca-5e03-bf19-9e18db4c3578","frontmatter":{"path":"/osa-2/2-else-elif","title":"Mera om if-satser"}}},{"node":{"id":"4272a508-fa3f-5c99-b0d0-ca0a77dcbd88","frontmatter":{"path":"/osa-2/3-kombinera-villkor","title":"Kombinera villkor"}}},{"node":{"id":"2a9f88b8-4fe8-5fcb-9dfe-b4d98dde5d42","frontmatter":{"path":"/osa-14/3-fardigstallande-av-spelet","title":"Färdigställande av spelet"}}},{"node":{"id":"a620e53b-7d15-54ea-9a40-5d549bf3fddc","frontmatter":{"path":"/osa-14/4-ditt-eget-sepl","title":"Ditt eget spel"}}},{"node":{"id":"6a0f5405-e6cb-581d-92e3-c8af9ad4e7c2","frontmatter":{"path":"/osa-3/1-loopar-med-villkor","title":"Loopar med villkor"}}},{"node":{"id":"a131e4e2-8f05-5986-ab20-e06d9ed60dbe","frontmatter":{"path":"/osa-3/2-behandla-strangar","title":"Behandla strängar"}}},{"node":{"id":"29bc027e-c4f5-5d80-9e6a-bca75ee73682","frontmatter":{"path":"/osa-3/3-mer-om-loopar","title":"Mera om loopar"}}},{"node":{"id":"ed81d1ed-bbbb-573c-a017-e49e4ccd3d56","frontmatter":{"path":"/osa-3/4-definiera-funktioner","title":"Definiera funktioner"}}},{"node":{"id":"f9cdcf8a-269d-5ddb-9346-9ca23e48ef7e","frontmatter":{"path":"/osa-3","title":"Modul 3"}}},{"node":{"id":"8c15b7c7-809b-5ea5-a801-7d20819960ea","frontmatter":{"path":"/osa-4/1-vscode","title":"Editorn Visual Studio Code, Pythontolken och det inbyggda debuggningsverktyget"}}},{"node":{"id":"0f597439-5fd6-5ebf-a758-51fa680510d6","frontmatter":{"path":"/osa-4/2-mer-om-funktioner","title":"Mer om funktioner"}}},{"node":{"id":"d61169f7-0d24-5b3c-8b8c-6f3001453119","frontmatter":{"path":"/osa-4/3-listor","title":"Listor"}}},{"node":{"id":"0cc0967d-12d5-5877-966c-83262ee2d053","frontmatter":{"path":"/osa-4/4-iteration","title":"Iteration"}}},{"node":{"id":"b7f5aab0-16f5-57ea-be99-ef776e766449","frontmatter":{"path":"/osa-4/5-utskrift","title":"Formatera utskrift"}}},{"node":{"id":"7ce1ae54-08a7-55c5-8fdf-e66c163be7c5","frontmatter":{"path":"/osa-4","title":"Modul 4"}}},{"node":{"id":"7616bfc3-86a8-51ad-a63d-f62e70d684f7","frontmatter":{"path":"/osa-5/1-mer-om-listor","title":"Mer om listor"}}},{"node":{"id":"2754089d-7b6b-5a07-98f8-ed47c35f0f1e","frontmatter":{"path":"/osa-5/2-referenser","title":"Referenser"}}},{"node":{"id":"e44de044-469b-5a0c-b484-8b1c6d76b36e","frontmatter":{"path":"/osa-5/4-tuple","title":"Tuple"}}},{"node":{"id":"1777675c-c2e5-5912-9351-6bf786995e74","frontmatter":{"path":"/osa-4/6-strangar-listor","title":"Mera strängar och listor"}}},{"node":{"id":"f5608366-0cdb-5799-ad10-c1ae5bf31ff5","frontmatter":{"path":"/osa-2/4-loopar","title":"Enkla loopar"}}},{"node":{"id":"335a567d-d08f-56d6-8449-9d4bfb7dbbf5","frontmatter":{"path":"/osa-2","title":"Modul 2"}}},{"node":{"id":"05201f8b-92c3-5f20-aa64-572c040a44ef","frontmatter":{"path":"/osa-6/2-skriva-filer","title":"Skriva filer"}}},{"node":{"id":"bc19aa61-1a37-5b73-bd20-0c3994c3a7cf","frontmatter":{"path":"/osa-6/3-fel","title":"Förbered dig på fel"}}},{"node":{"id":"9c4ca0dd-1be2-5b8f-a357-61049541022a","frontmatter":{"path":"/osa-6/1-lasa-filer","title":"Läsa filer"}}},{"node":{"id":"05a28a78-3f81-5cb4-8f94-9a16288789c8","frontmatter":{"path":"/osa-6/4-lokala-globala-variabler","title":"Lokala och globala variabler"}}},{"node":{"id":"2f89b471-3e51-5519-9173-c8029a4a5bf7","frontmatter":{"path":"/osa-6","title":"Modul 6"}}},{"node":{"id":"cda20318-6650-5b01-96a7-c8a9436ea427","frontmatter":{"path":"/osa-7/1-moduler","title":"Moduler"}}},{"node":{"id":"c0858900-47db-5c88-8875-147a8e652fe4","frontmatter":{"path":"/osa-5/3-lexikon","title":"Lexikon"}}},{"node":{"id":"11da0cd6-66de-5139-aeea-f6536ce49cca","frontmatter":{"path":"/osa-7/2-slumpmassighet","title":"Slump"}}},{"node":{"id":"2190a210-ac82-5c3e-8671-037f9247c83f","frontmatter":{"path":"/osa-7/3-tid-datum","title":"Tid och datum"}}},{"node":{"id":"9970fc94-eb27-5148-b31b-e887b737b7b4","frontmatter":{"path":"/osa-7/4-behandla-data","title":"Behandla data"}}},{"node":{"id":"9de0b38c-9ab2-5dca-918f-53f58d473b4e","frontmatter":{"path":"/osa-7/5-egna-moduler","title":"Skapa dina egna moduler"}}},{"node":{"id":"6c06e867-814c-5c2c-b0d6-d6cfaaf92234","frontmatter":{"path":"/osa-5","title":"Modul 5"}}},{"node":{"id":"f7d5f344-d3b4-56c6-bf18-45edc2245759","frontmatter":{"path":"/osa-8/4-metoder-i-egna-klasser","title":"Metoder i egna klasser"}}},{"node":{"id":"303465de-b86a-519b-b1b5-9711b03072d9","frontmatter":{"path":"/osa-8/5-fler-exempel","title":"Fler exempel"}}},{"node":{"id":"a85852ab-8cf8-52b4-8872-4c73d5821319","frontmatter":{"path":"/osa-9/1-objekt-och-referenser","title":"Objekt och referenser"}}},{"node":{"id":"b6cd6b79-fcb4-535d-8d00-b4f849f4647f","frontmatter":{"path":"/osa-9/3-inkapsling","title":"Inkapsling"}}},{"node":{"id":"c6757168-dbea-5c4f-aa4e-c2c3bb0ca423","frontmatter":{"path":"/osa-9/4-metodernas-rackvidd","title":"Metodernas räckvidd"}}},{"node":{"id":"601766bc-2985-5820-a4a3-32bbb761c69b","frontmatter":{"path":"/osa-7/6-funktionaliteter-python","title":"Flera funktionaliteter i Python"}}},{"node":{"id":"08ceb5d1-6e8e-599a-995d-a1125f7a1f80","frontmatter":{"path":"/osa-9/5-klassattribut","title":"Klassattribut"}}},{"node":{"id":"b1f13f0c-169e-519f-9f42-f572bebd8535","frontmatter":{"path":"/osa-9","title":"Modul 9"}}},{"node":{"id":"4b4101dc-9e1f-5a4a-bb4e-dbb6a4ba5e0d","frontmatter":{"path":"/osa-8/3-egna-klasser","title":"Egna klasser"}}},{"node":{"id":"35f36261-94d8-509f-9fcb-59b3e08fc6a1","frontmatter":{"path":"/osa-8/2-klasser-och-objekt","title":"Klasser och objekt"}}},{"node":{"id":"53079b0b-f0d2-5c35-83a0-4f713e57ce72","frontmatter":{"path":"/osa-8/1-objekt-och-metoder","title":"Objekt och metoder"}}},{"node":{"id":"954e5006-2925-5035-a27c-10e05897cfa4","frontmatter":{"path":"/osa-9/6-fler-exempel-med-klasser","title":"Fler exempel med klasser"}}},{"node":{"id":"f1eeb001-f445-57c9-b2e7-380dabc25b86","frontmatter":{"path":"/osa-8","title":"Modul 8"}}},{"node":{"id":"ccc63fff-7834-5270-b69c-944db644a9ad","frontmatter":{"path":"/osa-7","title":"Modul 7"}}},{"node":{"id":"75ae0566-a8bf-5305-aee3-4c5bc0d2d5e9","frontmatter":{"path":"/osa-9/2-objekt-som-attribut","title":"Objekt som attribut "}}}]}},"pageContext":{}},
    "staticQueryHashes": ["1357757885","994120085"]}