Regular Expressions
Regular Expressions
Resumo símbolos:
. -> substitui qualquer caractere
* -> completa os caracteres
+ -> caracteres na sequencia
? -> caractere opcional
^ -> linhas que começam com caractere
$ -> linhas que terminam com caractere
[] -> listar possíveis caracteres
[^] -> caractere não contido
() -> group
{} -> limitar numero de caracteres
\ -> caractere de escape
\w -> combina (matches) qualquer caractere alfabético, numérico e
underlines
\d -> combina com caracteres numéricos
\s -> combina só para espaços em branco
\b -> delimita limite de palavras, ou seja, pega somente palavras
inteiras. (Word Boundary)
OBS.. sempre que tivermos uma dessas letras em maiúsculo (ex: \B)
significa o 'oposto', com o b por exemplo
seria Non-Word Boundary, que combina qualquer palavra entre dois
caracteres, já o \b combina entre um caractere
e um não-caractere
-----------------------------------------------------------------------------------
--------------------------------------
1) CARACTERES ESPECIAIS:
ancoras
^ --> somente LINHAS que começam com o arg passado, deve ser colocado no
começo do arg
$ --> somente LINHAS que terminam com o arg passado, deve ser colocado no
final do arg
(**SEMPRE UTILIZAR**)
r --> raw string --> indica que o interpretador python não deve interpretar
nenhum caractere
especial dentro da string passada como arg,
como por exemplo, um \n.
Porem, funciona com os caracteres especiais da
própria biblioteca.
-----------------------------------------------------------------------------------
--------------------------------------
DIRETAMENTE NO TERMINAL:
grep --> um dos métodos do 're' é o 'grep', que pode ser usado diretamente no
terminal e retorna
todas as palavrar que contem a string que passamos.
Exemplos:
grep s.ring <path> --> string; spring (retorno caso o arquivo tenhas as
palavras)
grep ^bic <path> --> somente linhas que começam com 'bic'
grep bic$ <path> --> somente linhas que terminam com 'bic'
-----------------------------------------------------------------------------------
--------------------------------------
ALGUMAS FUNÇÕES DO MODULO:
re.search(arg, string) -> escaneia a string procurando pela primeira posição
que aparece arg e
retorna um match object dizendo a posição
re.findall(arg, string) -> mesma coisa da search, porém para todos os itens
na string, e
retorna uma lista
re.split(arg, string) -> mesma coisa do split para strings, porém podemos
passar mais de um parâmetro
para a quebra
exemplo: print(re.split('[.?!]','um cu! dois cu? tres
cu. meu cu' )) ---> somente as frases
print(re.split('([.?!])','um cu! dois cu?
tres cu. meu cu' )) -> frases e pontos
re.sub(arg, subs ,string) -> parecido com o replace, substitui uma parte
da string
exemplo: print(re.sub(r"[\w.%+-]+@[\w.-]+","[ANONIMO]","e-
mail recebido do [email protected]"))
nesse caso, nenhum dos caracteres dentro do
primeiro [] tem função especial.
OBS. O re.search e o grep são ambas funções para dar 'match' e encontrar uma
palavra específica
no texto
-----------------------------------------------------------------------------------
--------------------------------------
2) CLASSE DE CARACTERE (é um wildcard, ou um 'coringa')
[<caracteres>] --> escrito dessa forma, sem os <>, e nos deixa listar os
possíveis caracteres que
queremos que de match (seja igual) com o resto da string.
Exemplos:
print(check_punctuation("This is a sentence
that ends with a period.")) # True
print(check_punctuation("This is a sentence
fragment without a period")) # False
print(check_punctuation("Aren't regular
expressions awesome?")) # True
print(check_punctuation("Wow! We're really
picking up some steam now!")) # True
print(check_punctuation("End of the line")) #
False
Símbolos:
^ -> é como se fosse uma negação. Serve para listar caracteres que não
estão contidos nos []
exemplo: print(re.search(r'[^a-z]', 'Essa frase contem espaços',
re.IGNORECASE))
nesse caso, o retorno será o primeiro espaço, já que
este não é letra
print(re.search(r'[^a-z ]'), 'Essa frase contem
espaços', re.IGNORECASE))
já nesse caso, o retorno será '.', pois o espaço foi
adicionado na classe de
caractere
-----------------------------------------------------------------------------------
--------------------------------------
3) REPETITION QUALIFIERS
Exemplos:
* print(re.search(r'Py.*','Pyubveiuibihba')) --> retorna toda a string
* print(re.search(r'Py[a-z]*','Python Programming')) --> 'Python'
* print(re.search(r'Py.*n','Python Programming')) --> 'Python Programmin'
+ print(re.search(r'o+l+','hoolly')) --> ooll
+ print(re.search(r'o+l+','oil')) --> none
? print(re.search(r'b?oil','oil')) --> oil
? print(re.search(r'b?oil','boil')) --> boil
{} print(re.search(r'[a-zA-Z]{5}','um carro quebrado')) --> letras com 5
caracteres somente
{} print(re.findall(r'\b[a-zA-Z]{5}\b','um carro quebrado')) --> letras com 5
caracteres e que seja uma palavra completa
{} print(re.findall(r'\w{6,}\??','você comprou pão na padaria?')) -->
['comprou','padaria?']
-----------------------------------------------------------------------------------
--------------------------------------
CARACTERES DE ESCAPE
-----------------------------------------------------------------------------------
--------------------------------------
-----------------------------------------------------------------------------------
--------------------------------------
CAPTURANDO GRUPOS --> usando o valor retornado pela regex para futuras
operações
<referencia de mais exemplos: https://regular-
expressions.mobi/refcapture.html?wlr=1>
exemplo:
1) função que pega o nome de uma pessoa na ordem: sobrenome, nome. E
organiza: nome sobrenome
import re
def ordenando_nome(nome):
# result = re.search(r'^(\w*), (\w* ?.*?)$', nome)
result = re.search(r'^([\w \.-]*), ([\w \.-]*)$', nome)
if result is None:
return nome
return f'{result[2]} {result[1]}'
print(ordenando_nome('beludo, cuca'))
print(ordenando_nome('Bezerra, Mateus V.'))
def ordenando_nome(nome):
r = re.sub(r"^([\w .-]*), ([\w .-]*)$", r"\2 \1","nome")
return r
'''
import re
import re
def convert_phone_number(phone):
result = re.sub(r"(\d{3})-(\d{3})-(\d{4})", r"(\1) \2-\3", phone)
return result