Python

Strings em Profundidade: métodos, formatação e expressões regulares Já leu

7 min de leitura

Strings em Profundidade: métodos, formatação e expressões regulares
No artigo 02 vimos que strings são sequências imutáveis de caracteres. Mas há muito mais a explorar. Texto é o tipo de dado ma

No artigo 02 vimos que strings são sequências imutáveis de caracteres. Mas há muito mais a explorar. Texto é o tipo de dado mais comum no mundo real — nomes, endereços, mensagens, HTML, JSON, logs de sistema. Dominar a manipulação de strings em Python é uma habilidade indispensável no dia a dia profissional.


Revisão: Strings são Sequências

linguagem = "Python"

print(len(linguagem))      # 6
print(linguagem[0])        # P
print(linguagem[-1])       # n
print(linguagem[1:4])      # yth
print(linguagem[::-1])     # nohtyP

# Iterando
for letra in linguagem:
    print(letra, end=" ")  # P y t h o n

Métodos de Transformação

texto = "  Olá, Mundo!  "

print(texto.strip())        # "Olá, Mundo!"   — remove espaços das bordas
print(texto.lstrip())       # "Olá, Mundo!  " — remove à esquerda
print(texto.rstrip())       # "  Olá, Mundo!" — remove à direita

s = "python é incrível"
print(s.upper())            # PYTHON É INCRÍVEL
print(s.lower())            # python é incrível
print(s.capitalize())       # Python é incrível
print(s.title())            # Python É Incrível

print(s.replace("incrível", "poderoso"))
# python é poderoso

Métodos de Busca

frase = "Aprender Python é aprender a pensar"

print(frase.find("Python"))       # 9  — índice da primeira ocorrência
print(frase.find("Java"))         # -1 — não encontrado
print(frase.index("Python"))      # 9  — igual a find, mas lança ValueError se não achar
print(frase.count("aprender"))    # 2  — conta ocorrências (case-sensitive)
print(frase.startswith("Aprender"))  # True
print(frase.endswith("pensar"))      # True
print("Python" in frase)            # True

Métodos de Divisão e União

csv = "Ana,Bruno,Carla,Diego"
nomes = csv.split(",")
print(nomes)  # ['Ana', 'Bruno', 'Carla', 'Diego']

# Split com limite
partes = "a:b:c:d".split(":", 2)
print(partes)  # ['a', 'b', 'c:d']

# Dividindo por linhas
texto = "linha1\nlinha2\nlinha3"
linhas = texto.splitlines()
print(linhas)  # ['linha1', 'linha2', 'linha3']

# Unindo com join
palavras = ["Python", "é", "incrível"]
frase = " ".join(palavras)
print(frase)  # Python é incrível

caminho = "/".join(["home", "usuario", "documentos"])
print(caminho)  # home/usuario/documentos

Formatação de Strings

Python oferece três formas principais de formatar strings. A mais moderna e recomendada é a f-string, introduzida no Python 3.6.

f-strings (recomendado)

nome = "Ana"
nota = 9.75
aprovada = True

print(f"Aluna: {nome}")
print(f"Nota: {nota:.2f}")         # 9.75 — 2 casas decimais
print(f"Nota: {nota:.1f}")         # 9.8
print(f"Aprovada: {aprovada}")

# Expressões dentro de f-strings
x = 10
print(f"O dobro de {x} é {x * 2}")

# Alinhamento e preenchimento
print(f"{'Produto':<15} {'Preço':>8}")
print(f"{'Teclado':<15} {299.90:>8.2f}")
print(f"{'Mouse':<15} {89.90:>8.2f}")

Saída:

Produto           Preço
Teclado           299.90
Mouse              89.90

str.format() (Python 3.0+)

mensagem = "Olá, {}! Você tem {} mensagens.".format("Bruno", 5)
print(mensagem)

# Com nomes
template = "Aluno: {nome}, Nota: {nota:.1f}"
print(template.format(nome="Carla", nota=8.5))

% formatting (legado — evite em código novo)

print("Olá, %s! Nota: %.2f" % ("Diego", 9.0))

Strings Multilinha e Raw Strings

# Multilinha com \n
consulta = "SELECT *\nFROM usuarios\nWHERE ativo = 1"

# Multilinha com aspas triplas — preserva formatação
consulta = """
SELECT *
FROM usuarios
WHERE ativo = 1
"""

# Raw string — ignora sequências de escape
# Muito usada para expressões regulares e caminhos Windows
caminho = r"C:\Users\Ricardo\Documentos"
print(caminho)  # C:\Users\Ricardo\Documentos

Verificações Úteis

print("12345".isdigit())      # True
print("Python".isalpha())     # True
print("Python3".isalnum())    # True
print("  ".isspace())         # True
print("python".islower())     # True
print("PYTHON".isupper())     # True
print("Título".istitle())     # True

Expressões Regulares

Para buscas e transformações complexas em texto, Python oferece o módulo re. Expressões regulares (regex) são padrões que descrevem conjuntos de strings.

import re

texto = "Contato: joao@email.com ou maria@empresa.com.br"

# Buscando um padrão
padrao = r"[\w.+-]+@[\w-]+\.[\w.]+"
emails = re.findall(padrao, texto)
print(emails)  # ['joao@email.com', 'maria@empresa.com.br']

Funções principais do módulo re:

import re

texto = "Python 3.12 foi lançado em 2023"

# re.search() — encontra primeira ocorrência, retorna objeto Match ou None
match = re.search(r"\d+\.\d+", texto)
if match:
    print(match.group())   # 3.12
    print(match.start())   # 7 — índice inicial
    print(match.end())     # 11 — índice final

# re.findall() — retorna lista com todas as ocorrências
numeros = re.findall(r"\d+", texto)
print(numeros)  # ['3', '12', '2023']

# re.sub() — substitui ocorrências
resultado = re.sub(r"\d+", "X", texto)
print(resultado)  # Python X.X foi lançado em X

# re.split() — divide usando um padrão
partes = re.split(r"[,;]\s*", "Ana, Bruno; Carla,Diego")
print(partes)  # ['Ana', 'Bruno', 'Carla', 'Diego']

# re.compile() — compila padrão para reutilização eficiente
padrao_cep = re.compile(r"\d{5}-\d{3}")
print(padrao_cep.match("01310-100"))  # Match object
print(padrao_cep.match("abc"))        # None

Principais metacaracteres:

.       qualquer caractere (exceto \n)
\d      dígito [0-9]
\w      caractere de palavra [a-zA-Z0-9_]
\s      espaço em branco
^       início da string
$       fim da string
*       zero ou mais repetições
+       uma ou mais repetições
?       zero ou uma repetição
{n}     exatamente n repetições
{n,m}   entre n e m repetições
[abc]   qualquer um dos caracteres listados
[^abc]  qualquer caractere exceto os listados
(abc)   grupo de captura

Exemplo Completo: Validador de Dados

import re

def validar_email(email):
    padrao = r"^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$"
    return bool(re.match(padrao, email))

def validar_cpf_formato(cpf):
    padrao = r"^\d{3}\.\d{3}\.\d{3}-\d{2}$"
    return bool(re.match(padrao, cpf))

def validar_telefone(telefone):
    padrao = r"^\(?\d{2}\)?\s?\d{4,5}-?\d{4}$"
    return bool(re.match(padrao, telefone))

def formatar_cep(cep):
    """Remove formatação e reaplica no padrão correto."""
    apenas_numeros = re.sub(r"\D", "", cep)
    if len(apenas_numeros) == 8:
        return f"{apenas_numeros[:5]}-{apenas_numeros[5:]}"
    return None


testes_email = ["ana@email.com", "invalido@", "outro@dominio.com.br"]
for email in testes_email:
    status = "✓" if validar_email(email) else "✗"
    print(f"{status} {email}")

print()

testes_cpf = ["123.456.789-09", "12345678909", "abc.def.ghi-jk"]
for cpf in testes_cpf:
    status = "✓" if validar_cpf_formato(cpf) else "✗"
    print(f"{status} {cpf}")

print()

ceps = ["01310100", "01310-100", "1310-100"]
for cep in ceps:
    resultado = formatar_cep(cep)
    print(f"{cep} → {resultado}")

Resumo

  • Strings são sequências imutáveis — suportam índices, fatiamento e iteração
  • Métodos de transformação: strip, upper, lower, replace, title
  • Métodos de busca: find, count, startswith, endswith, in
  • split() divide e join() une — a dupla mais usada em processamento de texto
  • f-strings são a forma moderna e recomendada de formatar strings
  • Raw strings (r"...") evitam a interpretação de sequências de escape
  • O módulo re oferece buscas e transformações por padrões com expressões regulares

Referências e Leituras Complementares

Comentários

Mais em Python

Dicionários: chave, valor e as estruturas do mundo real
Dicionários: chave, valor e as estruturas do mundo real

Se listas organizam dados por posi&ccedil;&atilde;o, dicion&aacute;rios organ...

Tratamento de Exceções e Erros
Tratamento de Exceções e Erros

Todo programa que interage com o mundo real encontra situa&ccedil;&otilde;es...

Interfaces, Protocolos e Composição
Interfaces, Protocolos e Composição

No artigo anterior vimos que heran&ccedil;a &eacute; uma ferramenta poderosa...