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 ejoin()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
reoferece buscas e transformações por padrões com expressões regulares
Referências e Leituras Complementares
- Métodos de string — documentação oficial — https://docs.python.org/3/library/stdtypes.html#string-methods
- f-strings (PEP 498) — https://peps.python.org/pep-0498/
- Módulo re — expressões regulares — https://docs.python.org/3/library/re.html
- Testador de regex online para Python — https://regex101.com (selecione "Python" no painel)
- FRIEDL, Jeffrey E. F. Mastering Regular Expressions. 3. ed. O'Reilly Media, 2006. — a referência definitiva sobre regex.
- RAMALHO, Luciano. Fluent Python. 2. ed. O'Reilly Media, 2022. Cap. 2 — sequências de texto e bytes.
- SWEIGART, Al. Automate the Boring Stuff with Python. 2. ed. No Starch Press, 2019. Cap. 7 — uso prático de regex para automação.