Excluindo caracteres que correspondem a um padrão

Python:
Excluindo caracteres que correspondem a um padrão

Como fazer:

import re

# Exemplo de string
texto = "Olá, Mundo! 1234"

# Remove todos os dígitos
sem_digitos = re.sub(r'\d', '', texto)
print(sem_digitos)  # Saída: "Olá, Mundo! "

# Remove pontuação
sem_pontuacao = re.sub(r'[^\w\s]', '', texto)
print(sem_pontuacao)  # Saída: "Olá Mundo 1234"

# Remove vogais
sem_vogais = re.sub(r'[aeiouAEIOU]', '', texto)
print(sem_vogais)  # Saída: "Ol, Mnd! 1234"

Minha função personalizada

Faço isso com frequência suficiente para que eu refatorasse isso nesta simples função delete(). É também uma boa demonstração de doctests:

def delete(string: str, regex: str) -> str:
    """
    >>> delete("Olá, mundo!", "l")
    'Oá, mundo!'

    >>> delete("Olá, mundo!", "[a-z]")
    'O, !'
    """
    return re.sub(regex, "", string)

Aprofundamento

A prática de deletar caracteres que correspondem a um padrão em texto tem raízes profundas na ciência da computação, remontando a ferramentas Unix antigas como sed e grep. Em Python, o módulo re fornece essa capacidade, alavancando expressões regulares—uma ferramenta poderosa e versátil para o processamento de texto.

Alternativas ao módulo re incluem:

  • Métodos de string como replace() para casos simples.
  • Bibliotecas de terceiros como regex para padrões mais complexos e melhor suporte a Unicode.

Por baixo dos panos, quando você usa re.sub(), o interpretador Python compila o padrão em uma série de bytecodes, processados por uma máquina de estados que realiza a correspondência de padrões diretamente no texto de entrada. Esta operação pode ser intensiva em recursos para strings grandes ou padrões complexos, então considerações de desempenho são cruciais para o processamento de grandes volumes de dados.

Veja também