<jupyter_start><jupyter_text>Expressões Regulares   Quantificadores Quantificador  \+ : 1 ou mais   \* : 0 ou mais    \? : 0 ou 1  Exemplos  a ⟶ 'a'  a+ ⟶ 'a', 'aa', 'aaa', ...  a* ⟶ '', 'a', 'aa', 'aaa', ...    a? ⟶ '', 'a'  abc ⟶ 'abc'  ab+c ⟶ 'abc', 'abbc', 'abbbc'  a*bc ⟶ 'bc', 'abc', 'aabc', 'aaabc' ac?d ⟶ 'acd', 'ad'   Classes de caracteresClasses de caracteres – Dígito: d  – Letra: [A-Z],[a-z],[a-zA-Z]  – Letra, dígito ou '_': \w  O que casa com as seguintes expressões regulares  – \d\d\d ⟶ '111', '121', '289'  – [a-z]\w ⟶ 'a1', 'a_', 'cb'  – [A-Z]\d\d ⟶  'A23', 'B12', 'C89'   Grupos Permitem agrupar trechos de strings. São úteis paraextrair partes de uma string e/ou substituir strings.  Exemplos:  – Horas e minutos (HH:MM)  – \d\d:\d\d ⟶ Valida a string!  – (\d\d):(\d\d) ⟶ Separa em grupos para serem acessados usando \1, \2  É possível determinar o **inicio** e **fim** da string através dos metacaracteres ^ e \\$, respectivamente.Exemplos:  – ^inicio ⟶ Casa com 'inicio', porém não casa com '1inicio'  – fim\\$ ⟶ Casa  com  '2 fim', porém não casa com '2 fim 2'     – ^qualquerpadrao\\$ ⟶ Casa somente quando o padrão ocupa a linha inteira  ^\d\d\d\\$ ⟶ '222', '333', '234'  Padrões básicosa, X, 9, < : Caracteres ordinários que correspondem apenas a si mesmo.  . (um ponto) : Corresponde a qualquer caractere único, exceto nova linha '\n'.  [...] : Corresponde a qualquer caractere incluído no conjunto.  [^...] : Corresponde a qualquer caractere nãoincluído no conjunto.  \ : Utilizada para inibir a excepcionalidade de um caractere. Por exemplo, utilize \\. para corresponder a um ponto ou \\\ para corresponder a uma barra invertida.  \w : Corresponde a um caractere alfanumérico [a-zA-Z0-9_]. Se for maiúscula (\W),corresponde a um caractere não alfanumérico.  \s :  Corresponde a um único caractere de espaço em branco (nova linha, retorno, tabulação e forma [\n,\r,\t,\f]. Se for maiúscula (\S), corresponde a um caractere não espaço em branco.  \t,\n,\r Tabulação, Nova linha, Retorno.  \d : Digito decimal [0-9]. Se for maiúscula (\D), corresponde a um não dígito.  {n} : Exatamente n ocorrências.  {n,m} : No mínimo n ocorrências e no máximo m.  {n, } : No mínimo n ocorrências.{, m} : No máximo m ocorrências.  ? : 0 ou 1 ocorrência; o mesmo que {0, 1}.  \+ : 1 ou mais ocorrências; o mesmo que {,1}.  \* : 0 ou mais ocorrências.  ^ = inicio, $ = fim : Corresponde com o início ou fim de uma string.  (...) : Define um grupo para posterior extração ou reuso.  ... | ... : Alternativa, corresponde tanto a expressão regular da esquerda, quanto da direita.  Exemplos:– a\s\*b ⟶ 'a b', 'ab'  – python[XYZ] ⟶ 'pythonX', 'pythonY', 'pythonZ'  – 1. ⟶ '11', '1!', '1z', '1 '  – .* ⟶ '', 'a', '1', ' '  qualquer coisa que preencha uma linha  – \d\d\D ⟶ '12a', '18 ', '29z'  – [^abc]+ ⟶ 'd', 'de4', '12312312' ,'%sdz'  – py|thon ⟶ 'py', 'thon'  – c|\d ⟶ 'c', '9', '0'  – P|y|t|h|0|n ⟶ 'P', 'y', 't', 'h', '0', 'n'  mesmo que [Pyth0n]<jupyter_code>import re<jupyter_output><empty_output><jupyter_text>rebasicamente 3 funcoes (serch, findall, sub)  search sintaxe re.search(padrão, string)  A função search procura pela primeira ocorrência da expressão regular dentro da string.  Esse método irá procurar pelo padrão no texto, se encontrar retorna o objeto correspondente, se não encontrar retorna None.    findall sintaxe re.findall(padrão, string)  Encontra todas as ocorrências de um padrão em um texto.O retorno será uma lista com todas as correspondências.  sub Podemos utilizar o método sub para substituir opadrão encontrado por um valor específico.  Essa funcionalidade procura por todas as ocorrênciasde um padrão em um determinado texto e substitui.  Utilizando a variável dados criada anteriormente,substitua a virgula por ponto.    search<jupyter_code>texto = '<NAME> - 11-999999999'
r = re.search('(\d\d)-(\d{9})', texto)
print(r.group())
print(r.group(1))
print(r.group(2))<jupyter_output>999999999<jupyter_text>findall<jupyter_code>texto = """
01/12/2019 - IPAD3 - R$ 1287,99
01/12/2019 - GALAXY - R$ 987,56
"""
datas = re.findall('\d\d/\d\d/\d{4}',texto)
print(datas)
resultado = re.sub(',', '.', texto)
print(resultado)
texto = 'Programando em python em 3 2 1!'
r = re.search('python', texto)
print(r)
print(r.group())
import os.path
def path_base(base_name):
    current_dir = os.path.abspath(os.path.join(os.getcwd()))
    data_dir = current_dir.replace('notebook','data')
    data_base = data_dir + '\\' + base_name
    return data_base
# Ex1
arquivo = open(path_base('dados_re.txt'))
dados = arquivo.read()
arquivo.close()
dados
resultado = re.findall('-?\d+,\d+', dados)
print(resultado)
# fazer analise exploratoria
def convert_float(lista):
    aux = [float(re.sub(',','.',aux)) for aux in lista]
    return aux
resultado = convert_float(resultado)
print(resultado)
import statistics
def estatistica_lista(lista): 
    return {"min": min(lista),
            "mean": round(statistics.mean(lista),4), 
            "median": round(statistics.median(lista),4), 
            "mode": round(statistics.mode(lista),4),
            "max":max(lista)}
print(estatistica_lista(resultado))<jupyter_output>{'min': -77.81, 'mean': 17.8335, 'median': 30.06, 'mode': 93.53, 'max': 96.23}
{'fraction_non_alphanumeric': 0.1602760736196319, 'fraction_numerical': 0.0299079754601227, 'mean_word_length': 3.7950367647058822, 'pattern_counts': {'":': 5, '<': 13, '<?xml version=': 0, '>': 12, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 2, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '439838', 'license': 'MIT', 'n_tokens_mistral': 2225, 'n_tokens_neox': 2108, 'n_words': 652, 'path': 'notebook/py_aula5_regular expressions.ipynb', 'repo_name': 'victorblois/py_basico', 'size': '5222'}