2. Match, search and Findall

2.1. re.match()

Listing 321. Usage of re.match()
import re


PATTERN = r'^[a-zA-Z0-9][\w.+-]*@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]{2,20}$'

def is_valid_email(email: str) -> bool:
    if re.match(PATTERN, email):
        return True
    else:
        return False

is_valid_email('[email protected]')     # True
is_valid_email('[email protected]')       # False

2.3. re.findall() and re.finditer()

Listing 323. Usage of re.findall() and re.finditer()
import re


PATTERN = r'[A-Z]{2,10}-[0-9]{1,6}'
INPUT = 'MYPROJ-1337, MYPROJ-997 removed obsolete comments'

re.findall(PATTERN, INPUT)
# ['MYPROJ-1337', 'MYPROJ-997']

2.4. Comparision

Listing 324. Comparision between re.match(), re.search() and re.findall()
import re


PATTERN = r'[A-Z]{2,10}-[0-9]{1,6}'
INPUT = 'MYPROJ-1337, MYPROJ-997 removed obsolete comments'

re.findall(PATTERN, INPUT)           # ['MYPROJ-1337', 'MYPROJ-997']
re.search(PATTERN, INPUT).group()    # 'MYPROJ-1337'
re.match(PATTERN, INPUT)             # None

2.5. Good practices

2.5.1. Tests

Listing 325. Usage of re.match()
import re

PATTERN = r'^[a-zA-Z0-9][\w.+-]*@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]{2,20}$'


def is_valid_email(email: str) -> bool:
    """
    Function check email address against Regular Expression

    >>> is_valid_email('[email protected]')
    True
    >>> is_valid_email('[email protected]')
    True
    >>> is_valid_email('[email protected]')
    False
    >>> is_valid_email('[email protected]')
    True
    >>> is_valid_email('[email protected]')
    True
    >>> is_valid_email('[email protected]')
    False
    >>> is_valid_email('@nasa.gov')
    False
    >>> is_valid_email('[email protected]')
    False
    """
    if re.match(PATTERN, email):
        return True
    else:
        return False

2.6. Assignments

2.6.1. PESEL Validation

  • Complexity level: medium

  • Lines of code to write: 0 lines

  • Estimated time of completion: 10 min

English

Todo

English translation

Polish
  1. Przeprowadź eksperyment myślowy (nie pisz kodu tylko pomyśl)

  2. Jak sprawdzić za pomocą wyrażeń regularnych czy:

    • czy pesel jest poprawny?

    • jaka jest data urodzenia? (podaj obiekt datetime.date)

    • płeć użytkownika który podał PESEL

  3. Mając PESEL "69072101234"

    1. Jakie wyrażenie może być na pierwszym miejscu w PESEL?

    2. Jakie wyrażenie może być na drugim miejscu w PESEL?

    3. Jakie wyrażenie może być na trzecim miejscu w PESEL?

    4. Jakie wyrażenie może być na czwartym miejscu w PESEL?

    5. Jakie wyrażenie może być na piątym miejscu w PESEL?

    6. Jakie wyrażenie może być na szóstym miejscu w PESEL?

  4. Mając PESEL "18220801234"

    1. Jakie wyrażenie może być na pierwszym miejscu w PESEL?

    2. Jakie wyrażenie może być na drugim miejscu w PESEL?

    3. Jakie wyrażenie może być na trzecim miejscu w PESEL?

    4. Jakie wyrażenie może być na czwartym miejscu w PESEL?

    5. Jakie wyrażenie może być na piątym miejscu w PESEL?

    6. Jakie wyrażenie może być na szóstym miejscu w PESEL?

  5. Sprawdź sumę kontrolną