Lookahead ja Lookbehind

Positiivne Lookahead (?=…)

Positive Lookahead tagastab tulemuse juhul kui otsitavale väljendile järgneb ära kirjeldatud tingimus.

Järgnevas näites leiame tekstist kuupäevi tingimusel, et sellele järgneb sõna „event“:

import re

text = "It’s either 12-05-2023 event or in 15-06-2023."
pattern = r'\d{2}-\d{2}-\d{4}(?=\s+event)'
matches = re.findall(pattern, text)
print(matches)  # ['12-05-2023']
Väike spikker:
  • \d otsib numbrit ja {..} kaudu määrame ära, mitu numbrit järjest.

  • (?=\s+event) - \s on tühik ning lookahead kontrollib, et kuupäeva ja sõna „event“ vahel oleks tühik.

Negatiivne Lookahead (?!…)

Negative Lookahead tagastab tulemuse juhul kui otsitavale väljendile ei järgne ära kirjeldatud tingimus.

Järgnevas näites leiame tekstist ainult need sõnad, mille lõpus ei ole punkti:

import re

text = "Only find this."
pattern = r'\w+(?!\.)\b'
matches = re.findall(pattern, text)
print(matches)  # ['Only', find’]
Väike spikker:
  • \w vastab ühele tähemärgile, numbrile või alakriipsule. Lisades lõppu ‚+‘ liidab leitud tähed kokku terveteks sõnadeks.

  • \b lõpetab mustri ära sõna lõpus (Word boundary).

Positiivne Lookbehind (?<=…)

Positive lookbehind tagastab tulemuse juhul, kui otsitav väljend järgneb ära kirjeldatud tingimusele.

Järgnevas näites otsime tekstist sõna „blue“ tingimusel, et sellele eelneb sõna „color“

import re

text = "I like the color blue. The sky is blue."
patern = r'(?<=\bcolor\s)blue'
matches = re.findall(pattern, text)
print(matches)  # ['blue']

Negatiivne Lookbehind (?<!…)

Negative lookbehind tagastab tulemuse juhul, kui otsitav väljend ei järgne ära kirjeldatud tingimusele.

Järgnevas näites leiame tekstist arvud tingimusel, et neile ei eelne dollarimärk:

import re

text = "I have $50 and 30 euros."
pattern = r'(?<!\$)\b\d+\b'
matches = re.findall(pattern, text)
print(matches)  # ['30']

Mustrite asendamine - re.sub()

Tekstist kindla mustri järgi teksti asendamiseks on kolmeparameetriline re.sub() funktsioon.

re.sub(pattern, replacement, string) funktsioon otsib mustrit (pattern) tekstis (string) ja asendab selle (replacement).

Järgnevas näites otsime tekstist nime „John“ ning asendame selle nimega „Jane“

import re

text = "Hello, my name is John. Nice to meet you, John!"
pattern = r'John'
replacement = 'Jane'

new_text = re.sub(pattern, replacement, text)
print(new_text)  # Hello, my name is Jane. Nice to meet you, Jane!