Regular Expressions (parte 2)

Regular Expressions (parte 2)

Supondo que os usuários devem enviar uma URL ou 🔗link para compartilhar seus nomes de usuário 👤. Bora usar o regex para selecionar somente o usuário ao invés da URL toda, para isso há um exemplo de URL como base: https://twitter.com/fulano001 👇:

url = input("URL:").strip()
usuario =  url.replace("https://twitter.com/", "")
print(f"Usuario: {usuario}")
URL:https://twitter.com/fulano001
Usuario: fulano001

Há outros métodos ou funções para remover partes específicas de um texto:

url = input("URL:").strip()
usuario = url.removeprefix("https://twitter.com/")
print(f"Usuario: {usuario}")

Existe algumas limitações desse 👆 código, por exemplo, o usuário escrever a URL usando 'www.' ou protocolo 'http:', existe uma função sub() no módulo regex que seleciona um padrão e substitui 🔄 por outro padrão, no seguinte exemplo, vai selecionar o padrão e substituir por um espaço, então vai "apaga-lo" 👇:

import re

url = input("URL:").strip()
                #sub(padrão,substitui,texto)
usuario = re.sub(r"^(https?://)?(www\.)?twitter\.com", "", url)
print(f"Usuario: {usuario}")

No anterior 👉post há uma lista de alguns padrões, o uso de (...) serve para agrupar caracteres ou capturar padrões e o uso de (?: ...) serve para não capturar padrões e sim agrupar padrões, bora entender 👇:

import re

url = input("URL:").strip()
busca = re.search(r"^https?://(www\.)?twitter\.com\(\w+)$", url, re.IGNORECASE)
if busca:
    print(f"Usuario:", busca.group(2))  # grupo dois

Perceba que nesse 👆 código, na busca há dois grupos (www\.) e (\w+), obs: no regex a contagem começa no número 1. E podemos excluir a captura de grupo usando (?:)

import re

url = input("URL:").strip()
busca = re.search(r"^https?://(?:www\.)?twitter\.com\(\w+)$", url, re.IGNORECASE)
if busca:
    print(f"Usuario:", busca.group(1)) #grupo 1, so existe ele.

Walrus

O operador 🦭 "walrus" (:=) é uma adição introduzida no Python 3.8 que permite atribuir um valor a uma variável como parte de uma expressão. Isso é especialmente útil em situações em que você precisa avaliar uma expressão e, ao mesmo tempo, 🗄️ armazenar o resultado em uma variável para uso posterior.

import re

url = input("URL:").strip()
if busca := re.search(r"^https?://(?:www\.)?twitter\.com\(\w+)$", url, re.IGNORECASE):
    print(f"Usuario:", busca.group(1))