import re

# caracter "?": o caracter anterior pode vir uma ou nenhuma vez.
regex = re.compile('a?b')
print(regex.match('b'))
print(regex.match('ab'))
print(regex.match('aab'))

# {m,n}: pode implementar qualquer um dos repetidores que vimos anteirormente. m e n são parâmetros integer.
# m: caracter anterior terá pelo menos m repetições; n: caracter anterior terá no máximo n repetições.
regex = re.compile('a{3,5}')  # aaa, aaaa ou aaaaa
print(regex.match('a'))  # None, já que espera pelo menos 3 repetições do a
print(regex.match('aaa'))
print(regex.match('aaaaaa'))  # retorna o match dos primeiros 5 "as" e não dos 6.

# {0,} substitui *
regex = re.compile('a{0,}')
print(regex.match('a'))
print(regex.match(''))

# {1,} substitui +
regex = re.compile('a{1,}')
print(regex.match(''))
print(regex.match('aaa'))

# {0,1} substitui ?
regex = re.compile('a{0,1}')
print(regex.match('a'))
print(regex.match('aa'))

bdadf47612db4b10bf758e6d7084cd75be07b437
<mask token>

<mask token>
print(regex.match('b'))
print(regex.match('ab'))
print(regex.match('aab'))
<mask token>
print(regex.match('a'))
print(regex.match('aaa'))
print(regex.match('aaaaaa'))
<mask token>
print(regex.match('a'))
print(regex.match(''))
<mask token>
print(regex.match(''))
print(regex.match('aaa'))
<mask token>
print(regex.match('a'))
print(regex.match('aa'))

<mask token>
regex = re.compile('a?b')
print(regex.match('b'))
print(regex.match('ab'))
print(regex.match('aab'))
regex = re.compile('a{3,5}')
print(regex.match('a'))
print(regex.match('aaa'))
print(regex.match('aaaaaa'))
regex = re.compile('a{0,}')
print(regex.match('a'))
print(regex.match(''))
regex = re.compile('a{1,}')
print(regex.match(''))
print(regex.match('aaa'))
regex = re.compile('a{0,1}')
print(regex.match('a'))
print(regex.match('aa'))

import re
regex = re.compile('a?b')
print(regex.match('b'))
print(regex.match('ab'))
print(regex.match('aab'))
regex = re.compile('a{3,5}')
print(regex.match('a'))
print(regex.match('aaa'))
print(regex.match('aaaaaa'))
regex = re.compile('a{0,}')
print(regex.match('a'))
print(regex.match(''))
regex = re.compile('a{1,}')
print(regex.match(''))
print(regex.match('aaa'))
regex = re.compile('a{0,1}')
print(regex.match('a'))
print(regex.match('aa'))

import re

# caracter "?": o caracter anterior pode vir uma ou nenhuma vez.
regex = re.compile('a?b')
print(regex.match('b'))
print(regex.match('ab'))
print(regex.match('aab'))

# {m,n}: pode implementar qualquer um dos repetidores que vimos anteirormente. m e n são parâmetros integer.
# m: caracter anterior terá pelo menos m repetições; n: caracter anterior terá no máximo n repetições.
regex = re.compile('a{3,5}')  # aaa, aaaa ou aaaaa
print(regex.match('a'))  # None, já que espera pelo menos 3 repetições do a
print(regex.match('aaa'))
print(regex.match('aaaaaa'))  # retorna o match dos primeiros 5 "as" e não dos 6.

# {0,} substitui *
regex = re.compile('a{0,}')
print(regex.match('a'))
print(regex.match(''))

# {1,} substitui +
regex = re.compile('a{1,}')
print(regex.match(''))
print(regex.match('aaa'))

# {0,1} substitui ?
regex = re.compile('a{0,1}')
print(regex.match('a'))
print(regex.match('aa'))
