Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Nøstede funksjoner, reversering og sammenslåing av strenger | Avanserte Regulære Uttrykk og Anvendelser
Python Regulære Uttrykk

Nøstede funksjoner, reversering og sammenslåing av strenger

Sveip for å vise menyen

I dette kapittelet vil du utforske hvordan du kan utnytte kraften til regulære uttrykk i avanserte Python-scenarier, inkludert arbeid med nøstede funksjoner, reversering av strenger og sammenkobling av strenger. Disse teknikkene gjør det mulig å manipulere og analysere tekstdata mer effektivt og fleksibelt, og åpner for nye muligheter innen automatisering, datarensing og avansert mønstergjenkjenning.

Du vil lære hvordan regulære uttrykk kan:

  • Forbedre funksjonaliteten til nøstede funksjoner for å hente ut eller transformere data;
  • Forenkle prosessen med å reversere strenger basert på spesifikke mønstre;
  • Muliggjøre dynamisk og tilpassbar sammenkobling av strenger ved hjelp av mønsterbaserte regler.

Å mestre disse bruksområdene vil hjelpe deg å skrive mer konsis, lesbar og kraftfull Python-kode for et bredt spekter av praktiske oppgaver, fra behandling av loggfiler til bygging av datapipelines.

Bruk av regulære uttrykk i nøstede funksjoner

Når du bruker regulære uttrykk i Python, definerer du ofte mønstre og søkelogikk inne i funksjoner. Noen ganger kan det være nødvendig å bruke regulære uttrykk i nøstede funksjoner — funksjoner som er definert inne i andre funksjoner. Å forstå hvordan scope og variabeltilgang fungerer i denne sammenhengen hjelper deg å skrive tydelig og gjenbrukbar kode.

Definisjon: Nøstede funksjoner

En nøstet funksjon er en funksjon som er definert innenfor en annen funksjon. Den indre funksjonen kan få tilgang til variabler fra den omsluttende funksjonen på grunn av Pythons leksikalske scope (også kalt closure).

Scope og regulære uttrykk

  • Den indre funksjonen kan bruke regulære uttrykk og kompilerte objekter som er definert i den ytre funksjonen;
  • Du kan sende regulære uttrykk-treff eller resultater fra den ytre til den indre funksjonen for videre behandling;
  • Å kompilere et regex-mønster i den ytre funksjonen gir bedre effektivitet hvis den indre funksjonen bruker det samme mønsteret flere ganger.

Praktisk eksempel: Filtrering og uthenting av data

Anta at du ønsker å behandle en liste med e-postadresser, filtrere ut gyldige og hente ut brukernavnet. Du kan bruke en nøstet funksjon for å kapsle inn uthentingslogikken:

import re

def filter_and_extract_usernames(emails):
    pattern = re.compile(r"([\w.-]+)@[\w.-]+\.\w+")
    
    def extract_username(email):
        match = pattern.match(email)
        if match:
            return match.group(1)
        return None
    
    usernames = []
    for email in emails:
        username = extract_username(email)
        if username:
            usernames.append(username)
    return usernames

emails = [
    "alice.smith@example.com",
    "bob99@invalid",
    "carol.jones@domain.org"
]

print(filter_and_extract_usernames(emails))
# Output: ['alice.smith', 'carol.jones']

Viktige punkter:

  • pattern kompileres én gang i den ytre funksjonen og gjenbrukes i den nøstede extract_username-funksjonen;
  • Den indre funksjonen får tilgang til regex-mønsteret fra det omsluttende scope;
  • Denne strukturen holder koden organisert og effektiv, spesielt ved håndtering av komplekse dataparseringsoppgaver.

Å bruke regulære uttrykk i nøstede funksjoner er en kraftfull teknikk for å bygge modulær og vedlikeholdbar kode som behandler tekstdata effektivt.

123456789101112131415
import re def find_and_replace(text, pattern, replacement): def inner_replace(): # Use re.sub to replace all matches of the pattern in the text result = re.sub(pattern, replacement, text) return result return inner_replace() sample_text = "The rain in Spain stays mainly in the plain." pattern = r"ain" replacement = "###" result = find_and_replace(sample_text, pattern, replacement) print(result)

Reversering av strenger i Python

Reversering av en streng er en vanlig oppgave som kan oppstå ved behandling av tekstdata. Python tilbyr en enkel måte å reversere strenger på ved hjelp av slicing, og dette kan også kombineres med regulære uttrykk for avansert tekstmanipulering.

Hvordan reversere en streng

Du kan reversere en hvilken som helst streng i Python ved å bruke slicing:

text = "Hello, world!"
reversed_text = text[::-1]
print(reversed_text)  # Output: !dlrow ,olleH

Forklaring:

  • text[::-1] lager en ny streng ved å ta alle tegnene fra text, men i motsatt rekkefølge.

Bruksområder

Reversering av strenger er nyttig i flere situasjoner:

  • Kontrollere om en streng er et palindrom;
  • Skjule sensitiv informasjon ved å vise den baklengs;
  • Lage morsomme teksteffekter for brukergrensesnitt.

Kombinere regex med strengreversering

Du kan bruke regulære uttrykk for å finne spesifikke mønstre i en streng, og deretter kun reversere disse delene. Dette er nyttig når du ønsker å reversere bestemte ord eller mønstre, ikke hele strengen.

Eksempel: Reversere alle ord som starter med stor bokstav

import re

def reverse_capital_words(text):
    def reverse_match(match):
        return match.group()[::-1]
    # Find all words starting with a capital letter
    pattern = r'\b[A-Z][a-zA-Z]*\b'
    return re.sub(pattern, reverse_match, text)

sentence = "Alice and Bob went to Wonderland."
result = reverse_capital_words(sentence)
print(result)  # Output: "ecilA and boB went to .dnalrednoW"

Slik fungerer det:

  • Regex-mønsteret \b[A-Z][a-zA-Z]*\b matcher ord som starter med stor bokstav.
  • Funksjonen reverse_match reverserer hvert matchet ord.
  • re.sub erstatter hver match med sin reverserte versjon.

Kombinasjonen av regulære uttrykk og strengreversering gjør det mulig å utføre komplekse teksttransformasjoner på en konsis og fleksibel måte.

123456789101112131415161718
import re # Original string txt = "Python 3.12 is powerful!" # Reverse the string reversed_txt = txt[::-1] print("Reversed string:", reversed_txt) # Regex pattern to find all sequences of digits in the reversed string pattern = r"\\d+" digits = re.findall(pattern, reversed_txt) print("Digits found in reversed string:", digits) # Regex pattern to find all words in the reversed string word_pattern = r"[A-Za-z]+" words = re.findall(word_pattern, reversed_txt) print("Words found in reversed string:", words)

Sammenføying av strenger i Python

Sammenføying av strenger er en vanlig oppgave når man arbeider med tekstdata. Det er ofte nødvendig å kombinere flere strenger til én, for eksempel ved å sette sammen ord, linjer eller resultater fra et søk med regulære uttrykk.

Bruke join() for å kombinere en liste med strenger

Metoden str.join() er standardmåten for å sette sammen en liste med strenger til én enkelt streng. Du angir en separatorstreng, og kaller join() på denne med listen du vil kombinere.

words = ['Python', 'is', 'fun']
sentence = ' '.join(words)
print(sentence)  # Output: Python is fun

Viktige punkter om join():

  • Separatoren (for eksempel mellomrom, komma eller linjeskift) plasseres foran .join();
  • Argumentet til join() må være et itererbart objekt med strenger (som en liste eller tuple);
  • Resultatet er én streng som inneholder alle elementene, adskilt av valgt separator.

Sammenføye regex-treff til én streng

Når du bruker funksjonen re.findall(), returnerer den en liste med alle ikke-overlappende treff. Du kan bruke join() for å kombinere disse treffene til én streng.

import re

text = 'cat, dog, bat, rat'
animals = re.findall(r'\w{3}', text)
all_animals = ', '.join(animals)
print(all_animals)  # Output: cat, dog, bat, rat

Vanlige bruksområder:

  • Kombinere alle regex-treff til en kommaseparert streng;
  • Slå sammen tekstlinjer til én blokk;
  • Lage CSV-linjer fra lister med verdier.

Effektiv sammenføying av strenger hjelper deg å behandle, vise og lagre tekstdata på en lesbar og strukturert måte.

12345678910111213141516171819202122
import re # Joining a list of strings with a space words = ["Python", "Regular", "Expressions"] joined_words = " ".join(words) print("Joined list:", joined_words) # Using regex to extract all words starting with a capital letter text = "Alice and Bob are learning Regular Expressions in Python." pattern = r"\\b[A-Z][a-z]+\\b" capitalized_words = re.findall(pattern, text) print("Capitalized words:", capitalized_words) # Joining regex match groups with a hyphen joined_matches = "-".join(capitalized_words) print("Hyphen-joined matches:", joined_matches) # Using regex groups and joining them match = re.match(r"(\\w+) (\\w+)", "Hello World") if match: groups_joined = ", ".join(match.groups()) print("Groups joined:", groups_joined)

1. Hva er en nøstet funksjon i Python, og hvordan kan den være nyttig når du arbeider med regulære uttrykk

2. Hvilken Python-metode brukes vanligvis for å slå sammen en liste med strenger til én streng, og hvordan kan den kombineres med regex-treff

question mark

Hva er en nøstet funksjon i Python, og hvordan kan den være nyttig når du arbeider med regulære uttrykk

Velg det helt riktige svaret

question mark

Hvilken Python-metode brukes vanligvis for å slå sammen en liste med strenger til én streng, og hvordan kan den kombineres med regex-treff

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 6

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Nøstede funksjoner, reversering og sammenslåing av strenger

I dette kapittelet vil du utforske hvordan du kan utnytte kraften til regulære uttrykk i avanserte Python-scenarier, inkludert arbeid med nøstede funksjoner, reversering av strenger og sammenkobling av strenger. Disse teknikkene gjør det mulig å manipulere og analysere tekstdata mer effektivt og fleksibelt, og åpner for nye muligheter innen automatisering, datarensing og avansert mønstergjenkjenning.

Du vil lære hvordan regulære uttrykk kan:

  • Forbedre funksjonaliteten til nøstede funksjoner for å hente ut eller transformere data;
  • Forenkle prosessen med å reversere strenger basert på spesifikke mønstre;
  • Muliggjøre dynamisk og tilpassbar sammenkobling av strenger ved hjelp av mønsterbaserte regler.

Å mestre disse bruksområdene vil hjelpe deg å skrive mer konsis, lesbar og kraftfull Python-kode for et bredt spekter av praktiske oppgaver, fra behandling av loggfiler til bygging av datapipelines.

Bruk av regulære uttrykk i nøstede funksjoner

Når du bruker regulære uttrykk i Python, definerer du ofte mønstre og søkelogikk inne i funksjoner. Noen ganger kan det være nødvendig å bruke regulære uttrykk i nøstede funksjoner — funksjoner som er definert inne i andre funksjoner. Å forstå hvordan scope og variabeltilgang fungerer i denne sammenhengen hjelper deg å skrive tydelig og gjenbrukbar kode.

Definisjon: Nøstede funksjoner

En nøstet funksjon er en funksjon som er definert innenfor en annen funksjon. Den indre funksjonen kan få tilgang til variabler fra den omsluttende funksjonen på grunn av Pythons leksikalske scope (også kalt closure).

Scope og regulære uttrykk

  • Den indre funksjonen kan bruke regulære uttrykk og kompilerte objekter som er definert i den ytre funksjonen;
  • Du kan sende regulære uttrykk-treff eller resultater fra den ytre til den indre funksjonen for videre behandling;
  • Å kompilere et regex-mønster i den ytre funksjonen gir bedre effektivitet hvis den indre funksjonen bruker det samme mønsteret flere ganger.

Praktisk eksempel: Filtrering og uthenting av data

Anta at du ønsker å behandle en liste med e-postadresser, filtrere ut gyldige og hente ut brukernavnet. Du kan bruke en nøstet funksjon for å kapsle inn uthentingslogikken:

import re

def filter_and_extract_usernames(emails):
    pattern = re.compile(r"([\w.-]+)@[\w.-]+\.\w+")
    
    def extract_username(email):
        match = pattern.match(email)
        if match:
            return match.group(1)
        return None
    
    usernames = []
    for email in emails:
        username = extract_username(email)
        if username:
            usernames.append(username)
    return usernames

emails = [
    "alice.smith@example.com",
    "bob99@invalid",
    "carol.jones@domain.org"
]

print(filter_and_extract_usernames(emails))
# Output: ['alice.smith', 'carol.jones']

Viktige punkter:

  • pattern kompileres én gang i den ytre funksjonen og gjenbrukes i den nøstede extract_username-funksjonen;
  • Den indre funksjonen får tilgang til regex-mønsteret fra det omsluttende scope;
  • Denne strukturen holder koden organisert og effektiv, spesielt ved håndtering av komplekse dataparseringsoppgaver.

Å bruke regulære uttrykk i nøstede funksjoner er en kraftfull teknikk for å bygge modulær og vedlikeholdbar kode som behandler tekstdata effektivt.

123456789101112131415
import re def find_and_replace(text, pattern, replacement): def inner_replace(): # Use re.sub to replace all matches of the pattern in the text result = re.sub(pattern, replacement, text) return result return inner_replace() sample_text = "The rain in Spain stays mainly in the plain." pattern = r"ain" replacement = "###" result = find_and_replace(sample_text, pattern, replacement) print(result)

Reversering av strenger i Python

Reversering av en streng er en vanlig oppgave som kan oppstå ved behandling av tekstdata. Python tilbyr en enkel måte å reversere strenger på ved hjelp av slicing, og dette kan også kombineres med regulære uttrykk for avansert tekstmanipulering.

Hvordan reversere en streng

Du kan reversere en hvilken som helst streng i Python ved å bruke slicing:

text = "Hello, world!"
reversed_text = text[::-1]
print(reversed_text)  # Output: !dlrow ,olleH

Forklaring:

  • text[::-1] lager en ny streng ved å ta alle tegnene fra text, men i motsatt rekkefølge.

Bruksområder

Reversering av strenger er nyttig i flere situasjoner:

  • Kontrollere om en streng er et palindrom;
  • Skjule sensitiv informasjon ved å vise den baklengs;
  • Lage morsomme teksteffekter for brukergrensesnitt.

Kombinere regex med strengreversering

Du kan bruke regulære uttrykk for å finne spesifikke mønstre i en streng, og deretter kun reversere disse delene. Dette er nyttig når du ønsker å reversere bestemte ord eller mønstre, ikke hele strengen.

Eksempel: Reversere alle ord som starter med stor bokstav

import re

def reverse_capital_words(text):
    def reverse_match(match):
        return match.group()[::-1]
    # Find all words starting with a capital letter
    pattern = r'\b[A-Z][a-zA-Z]*\b'
    return re.sub(pattern, reverse_match, text)

sentence = "Alice and Bob went to Wonderland."
result = reverse_capital_words(sentence)
print(result)  # Output: "ecilA and boB went to .dnalrednoW"

Slik fungerer det:

  • Regex-mønsteret \b[A-Z][a-zA-Z]*\b matcher ord som starter med stor bokstav.
  • Funksjonen reverse_match reverserer hvert matchet ord.
  • re.sub erstatter hver match med sin reverserte versjon.

Kombinasjonen av regulære uttrykk og strengreversering gjør det mulig å utføre komplekse teksttransformasjoner på en konsis og fleksibel måte.

123456789101112131415161718
import re # Original string txt = "Python 3.12 is powerful!" # Reverse the string reversed_txt = txt[::-1] print("Reversed string:", reversed_txt) # Regex pattern to find all sequences of digits in the reversed string pattern = r"\\d+" digits = re.findall(pattern, reversed_txt) print("Digits found in reversed string:", digits) # Regex pattern to find all words in the reversed string word_pattern = r"[A-Za-z]+" words = re.findall(word_pattern, reversed_txt) print("Words found in reversed string:", words)

Sammenføying av strenger i Python

Sammenføying av strenger er en vanlig oppgave når man arbeider med tekstdata. Det er ofte nødvendig å kombinere flere strenger til én, for eksempel ved å sette sammen ord, linjer eller resultater fra et søk med regulære uttrykk.

Bruke join() for å kombinere en liste med strenger

Metoden str.join() er standardmåten for å sette sammen en liste med strenger til én enkelt streng. Du angir en separatorstreng, og kaller join() på denne med listen du vil kombinere.

words = ['Python', 'is', 'fun']
sentence = ' '.join(words)
print(sentence)  # Output: Python is fun

Viktige punkter om join():

  • Separatoren (for eksempel mellomrom, komma eller linjeskift) plasseres foran .join();
  • Argumentet til join() må være et itererbart objekt med strenger (som en liste eller tuple);
  • Resultatet er én streng som inneholder alle elementene, adskilt av valgt separator.

Sammenføye regex-treff til én streng

Når du bruker funksjonen re.findall(), returnerer den en liste med alle ikke-overlappende treff. Du kan bruke join() for å kombinere disse treffene til én streng.

import re

text = 'cat, dog, bat, rat'
animals = re.findall(r'\w{3}', text)
all_animals = ', '.join(animals)
print(all_animals)  # Output: cat, dog, bat, rat

Vanlige bruksområder:

  • Kombinere alle regex-treff til en kommaseparert streng;
  • Slå sammen tekstlinjer til én blokk;
  • Lage CSV-linjer fra lister med verdier.

Effektiv sammenføying av strenger hjelper deg å behandle, vise og lagre tekstdata på en lesbar og strukturert måte.

12345678910111213141516171819202122
import re # Joining a list of strings with a space words = ["Python", "Regular", "Expressions"] joined_words = " ".join(words) print("Joined list:", joined_words) # Using regex to extract all words starting with a capital letter text = "Alice and Bob are learning Regular Expressions in Python." pattern = r"\\b[A-Z][a-z]+\\b" capitalized_words = re.findall(pattern, text) print("Capitalized words:", capitalized_words) # Joining regex match groups with a hyphen joined_matches = "-".join(capitalized_words) print("Hyphen-joined matches:", joined_matches) # Using regex groups and joining them match = re.match(r"(\\w+) (\\w+)", "Hello World") if match: groups_joined = ", ".join(match.groups()) print("Groups joined:", groups_joined)
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 6
some-alt