Aula 02 - Encontrando padrões em textos


1- Ideia básica

Uma expressão regular é uma notação para representar padrões em strings. Serve para validar entradas de dados ou fazer busca e extração de informações em textos.

Por exemplo, para verificar se um dado fornecido é um número de 0,00 a 9,99 pode-se usar a expressão regular \d,\d\d, pois o símbolo \d é um curinga que casa com um dígito.

O verbo casar aqui está sendo usado tradução para match, no sentido de combinar, encaixar, parear. Dizemos que a expressão \d,\d\d casa com 1,23 mas não casa com 123 (falta a vírgula) nem com 1,2c (“c” não casa com \d, porque não é um dígito).

O termo em inglês é regular expression de onde vem as abreviações regex e re (o nome do módulo Python). Na ciência da computação, o termo tem um significado bem específico (veja expressão regular no Glossário).

2- Exemplos simples


Veja alguns exemplos com breves explicações para ter uma idéia geral:

\d{5}-\d{3}
O padrão de um CEP como 05432-001: 5 dígitos, um - (hífen) e mais 3 dígitos. A sequência \d é um metacaractere, um curinga que casa com um dígito (0 a 9). A sequência {5} é um quantificador: indica que o padrão precedente deve ser repetido 5 vezes, portanto \d{5} é o mesmo que \d\d\d\d\d.

[012]\d:[0-5]\d

Semelhante ao formato de horas e minutos, como 03:10 ou 23:59. A sequência entre colchetes [012] define um conjunto. Neste caso, o conjunto especifica que primeiro caractere deve ser 0, 1 ou 2. Dentro dos [] o hífen indica uma faixa de caracteres, ou seja, [0-5] é uma forma abreviada para o conjunto [012345]; o conjunto que representa todos os dígitos, [0-9] é o mesmo que \d. Note que esta expressão regular também aceita o texto 29:00 que não é uma hora válida (horas válidas serão o tema de um dos Exercícios).

[A-Z]{3}-\d{4}

É o padrão de uma placa de automóvel no Brasil: três letras de A a Z é seguidas de um - (hífen) seguido de quatro dígitos, como CKD-4592.


Especificadores



Especificam o conjunto de caracteres a casar em uma posição.

metacaractereconhecido comosignificado
.curingaqualquer caractere, exceto a quebra de linha \n (ver flag_dotall)
[...]conjuntoqualquer caractere incluido no conjunto
[^...]conjunto negadoqualquer caractere não incluido no conjunto
\ddígitoo mesmo que [0-9]
\Dnão-digítoo mesmo que [^0-9]
\sbrancoespaço, quebra de linha, tabs etc.; o mesmo que [ \t\n\r\f\v]
\Snão-brancoo mesmo que [^ \t\n\r\f\v]
\walfanuméricoo mesmo que [a-zA-Z0-9_] (mas pode incluir caracteres Unicode; ver flag_unicode)
\Wnão-alfanuméricoo complemento de \w
\escapeanula o significado especial do metacaractere seguinte; por exemplo, \. representa apenas um ponto, e não o curinga

Quantificadores


Definem o número permitido repetições da expressão regular precedente.
metacaracteresignificado
{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
{,n}no máximo n ocorrências
?0 ou 1 ocorrência; o mesmo que {,1}
+1 ou mais ocorrência; o mesmo que {1,}
*0 ou mais ocorrência
«q»?modera qualquer um dos quantificadores acima (ver Gula × moderação)

Âncoras

Estabelecem posições de referência para o casamento do restante da regex. Note que estes metacaracteres não casam com caracteres no texto, mas sim com posições antes, depois ou entre os caracteres.
metacaracteresignificado
^início do texto, ou de uma linha com o flag re.MULTILINE
\Ainício do texto
$fim do texto, ou de uma linha com o flag re.MULTILINE; não captura o \n no fim do texto ou da linha
\Zfim do texto
\bposição de borda, logo antes do início de uma palavra, ou logo depois do seu término; o mesmo que a posição entre \W e \w ou vice-versa
\Bposição de não-borda

Agrupamento


Definem ou grupos ou alternativas.
metacaracteresignificado
(...)define um grupo, para efeito de aplicação de quantificador, alternativa ou de posterir extração ou re-uso
...|...alternativa; casa a regex à direita ou à esquerda
\«n»recupera o texto casado no n-ésimo grupo


3- Usando o Python

O primeiro passo é utilizar a biblioteca do python denominada RE (regular expression). Após importar a biblioteca devemos localizar o texto que deseja-se eliminar e substituir por espaços:

# preprocessing the text

text = re.sub(r'\[[0-9]*\]',' ', text)
text = re.sub(r'\s+',' ', text)

clean_text = text.lower()
clean_text = re.sub(r'\W', ' ', clean_text)
clean_text = re.sub(r'\d', ' ', clean_text)
clean_text = re.sub(r'\s+', ' ', clean_text)


Encontrei boa parte desse tutorial no site turing.com.br

Aula 02 - Encontrando padrões em textos Aula 02 - Encontrando padrões em textos Reviewed by Vinicius dos Santos on 05:27:00 Rating: 5

Nenhum comentário

Escreve ai sua opinião!