Reguljära uttryck används i många olika mjukvaror. De kan användas både för att utföra sökningar men även för att redigera text. I Python kan det exempelvis se ut på följande sätt:
import re sträng_att_manipulera = "Vi ska byta plats på höger och vänster" print(sträng_att_manipulera) >>> "Vi ska byta plats på höger och vänster" reguljärt_uttryck = r"höger och vänster" byte = "vänster och höger" #Koden nedan försöker matcha det reguljära uttrycket "höger och vänster" med strängen och byter ut den delen med "vänster och höger" om programmet finner den. manipulerad_sträng = re.sub(reguljärt_uttryck, byte, sträng_att_manipulera) print(manipulerad_sträng) >>> "Vi ska byta plats på vänster och höger"
I exemplet ovan använde vi ett reguljärt uttryck utan några specialtecken. Det är ändå helt giltig kod eftersom reguljära uttryck är känslig för gemener och versaler. Det betyder att sträng inte skulle ha blivit manipulerad om den i stället sett ut på följande sätt:
I det reguljära uttrycket söker vi efter en sträng som enbart är skriven i gemener. För att även omfatta meningar där höger och vänster förekommer i början av meningar med stort H i början måste vi även anpassa vårt reguljära uttryck enligt den situationen. Men vi vill fortfarande finna förekomster där hela strängen är skriven i gemener, precis som i det första exemplet. För att åstadkomma detta kan vi föra in en teckenklass med hjälp av hakparenteser [ ].
Det reguljära uttrycket ser då ut på följande sätt: [Hh]öger och vänster och anpassat till Python-syntax samt sparad i en variabel: reguljärt_uttryck = r”[Hh]öger och vänster”
Teckenklassen markerar att vi vill ha ett av tecknen i klassen med i det reguljära uttrycket. Klarare sagt säger vi att delen vi söker efter ska inledas med stort H eller litet h följt av öger och vänster. Vi uppdaterar vårt tidigare program för att fungera i den här situationen.
import re sträng_att_manipulera = "Höger och vänster vill vi byta plats på." print(sträng_att_manipulera) >>> "Höger och vänster vill vi byta plats på." reguljärt_uttryck = r"[Hh]öger och vänster" byte = "vänster och höger" #Koden nedan försöker matcha det reguljära uttrycket "höger och vänster" med strängen och byter ut den delen med "vänster och höger" om den finner den. manipulerad_sträng = re.sub(reguljärt_uttryck, byte, sträng_att_manipulera) print(manipulerad_sträng) >>> "vänster och höger vill vi byta plats på."
Nu blev det nästan rätt. Men bara nästan eftersom meningen nu inleds med liten bokstav och så kan vi ju inte ha det. Med like enkel kod kan vi dock samtidigt se till att även det ändras. men vi vill ju inte att det ska stå Vänster med stort V mitt inne i en mening. Därför får vi använda oss av ^ som berättar att det reguljära uttrycket ska matcha med början av strängen. (r”^vänster och höger”)
import re sträng_att_manipulera = "Höger och vänster vill vi byta plats på." print(sträng_att_manipulera) >>> "Höger och vänster vill vi byta plats på." reguljärt_uttryck = r"[Hh]öger och vänster" byte = "vänster och höger" #Koden nedan försöker matcha det reguljära uttrycket "höger och vänster" med strängen och byter ut den delen med "vänster och höger" om den finner den. manipulerad_sträng = re.sub(reguljärt_uttryck, byte, sträng_att_manipulera) #Här kontrollerar vi om "vänster och höger" förekommer i början av meningen och byter ut den med "Vänster och höger" om den finns där. Annars görs ingen ändring. reguljärt_uttryck = r"^vänster och höger" byte = "Vänster och höger" manipulerad_sträng = re.sub(reguljärt_uttryck, byte, manipulerad_sträng) print(manipulerad_sträng) >>> "Vänster och höger vill vi byta plats på."
Sidan uppdateras kontinuerligt, men nedan finns andra funktioner i reguljära uttryck. I kolumnen ”träffar” har jag markerat de tecken respektive funktion träffar.
Förklaring | Syntax | Träffar |
En bokstav: a, b eller c (gemener) | [abc] | Baka en kaka |
En bokstav: A, B eller C (versaler) | [ABC] | Baka en kaka |
Ett tecken utom a, b, eller c (gemener) | [^abc] | Baka en kaka |
En gemen bokstav från a till ö | [a-ö] | 345Eur |
En versal bokstav från A till Ö | [A-Ö] | 345Eur |
En grupp i en sträng: abc | (abc) | abc-bok |
Ett tecken från a till ö och från A till Ö | [a-öA-Ö] | Börjes ABC–bok |
Vilket enskilt tecken som helst | . | 1 € a ! |
Ditt eller datt | a|b | Kebab |
Blanksteg och annat ”tomt utrymme” | \s | Katten satt på en hatt. |
Alla tecken utom blanksteg eller tomt utrymme | \S | Katten satt på en hatt. |
Heltal | \d | 5 katter |
Icke-heltal | \D | 5 katter |
Matcha allt inom parentesen (inget tilldelat ID) | (?…) | |
Fånga allt inom parentesen (tilldelat ID) | (…) | |
Inget eller ett av a | katta? | Katten och katta |
0 eller fler förekomster av a | Ma* | En katt i Maastricht |
1 eller fler förekomster av a | a+ | En katt i Maastricht |
Exakt x förekomster av a | a{3} | Han jaaamade! |
X eller mer förekomster av ä | ä{2,} | Ett estniskt ord är jäääär. Det är jää + äär |
X till Y förekomster av ö | ö{2, 3} | Töööö är också ett ord. Töö + öö |
Strängbörjan | ^[Rr]äv | Räven rev en annan räv |
Strängslut | [Rr]äv$ | Räven rev en annan räv |
Ordgräns | [Rr]äv\b | Var räven en sträv räv? |
Icke-ordgräns | sträva\B | Att sträva är att vara strävande |