Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Lookahead, Lookbehind e Correspondência Não Gananciosa | Expressões Regulares Avançadas e Aplicações
Expressões Regulares em Python

Lookahead, Lookbehind e Correspondência Não Gananciosa

Deslize para mostrar o menu

Compreensão de recursos avançados de expressões regulares como lookahead, lookbehind e quantificadores não gananciosos permite realizar correspondências de padrões altamente precisas em Python. Lookahead e lookbehind são tipos de afirmações de largura zero, que possibilitam afirmar se um padrão existe (ou não existe) à frente ou atrás da posição atual no texto, sem incluir esse padrão na correspondência propriamente dita. Quantificadores não gananciosos permitem controlar quanto texto um padrão consome, garantindo que apenas o necessário seja correspondido.

  • Lookahead é escrito como (?=...) e verifica se um determinado padrão segue a posição atual;
  • Lookbehind, escrito como (?<=...), verifica se um determinado padrão precede a posição atual;
  • Quantificadores não gananciosos como *? e +? modificam o comportamento padrão ganancioso dos quantificadores;
  • Por padrão, quantificadores como * e + correspondem ao máximo de texto possível; ao adicionar um ?, tornam-se não gananciosos, correspondendo ao mínimo de texto possível.

Exemplo de lookahead: \w+(?=\d) corresponde a uma palavra apenas se ela for imediatamente seguida por um dígito, mas o dígito não faz parte da correspondência. O lookbehind é semelhante em função, mas atua na direção oposta.

1234567891011121314
import re # Lookahead: Match words followed by a digit text = "apple1 banana2 cherry pie" pattern_lookahead = r"\w+(?=\d)" matches_lookahead = re.findall(pattern_lookahead, text) print("Lookahead matches:", matches_lookahead) # Non-greedy matching: Extract text between tags html = "<b>Bold</b> and <b>Strong</b>" pattern_nongreedy = r"<b>(.*?)</b>" matches_nongreedy = re.findall(pattern_nongreedy, html) print("Non-greedy matches:", matches_nongreedy)

Como Lookahead e Quantificadores Não Gananciosos Afetam a Correspondência de Padrões

O padrão lookahead \w+(?=\d) no exemplo corresponde a qualquer sequência de caracteres de palavra (\w+) apenas se for diretamente seguida por um dígito (\d). O resultado correspondente não inclui o dígito, pois o lookahead não consome os caracteres que verifica. Isso é útil quando se deseja encontrar palavras que atendam a uma determinada condição sobre o que vem a seguir, sem incluir essa parte seguinte na correspondência.

O quantificador não ganancioso *? em <b>(.*?)</b> altera a quantidade de texto correspondida entre as tags <b> e </b>. Um quantificador ganancioso como .* corresponderia ao máximo possível, potencialmente capturando tudo do primeiro <b> até o último </b>. Ao usar *?, o padrão corresponde ao mínimo possível, capturando apenas o texto dentro de cada par de tags individualmente. Isso evita correspondências excessivas e garante a extração do menor trecho correspondente possível.

Lookahead e quantificadores não gananciosos oferecem controle poderoso sobre como suas expressões regulares selecionam o texto:

  • Lookahead permite afirmar que uma correspondência é seguida por um padrão específico sem incluí-lo;
  • Quantificadores não gananciosos ajudam a evitar capturar mais texto do que o necessário.
question mark

O que o quantificador não ganancioso *? faz?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 1

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Lookahead, Lookbehind e Correspondência Não Gananciosa

Compreensão de recursos avançados de expressões regulares como lookahead, lookbehind e quantificadores não gananciosos permite realizar correspondências de padrões altamente precisas em Python. Lookahead e lookbehind são tipos de afirmações de largura zero, que possibilitam afirmar se um padrão existe (ou não existe) à frente ou atrás da posição atual no texto, sem incluir esse padrão na correspondência propriamente dita. Quantificadores não gananciosos permitem controlar quanto texto um padrão consome, garantindo que apenas o necessário seja correspondido.

  • Lookahead é escrito como (?=...) e verifica se um determinado padrão segue a posição atual;
  • Lookbehind, escrito como (?<=...), verifica se um determinado padrão precede a posição atual;
  • Quantificadores não gananciosos como *? e +? modificam o comportamento padrão ganancioso dos quantificadores;
  • Por padrão, quantificadores como * e + correspondem ao máximo de texto possível; ao adicionar um ?, tornam-se não gananciosos, correspondendo ao mínimo de texto possível.

Exemplo de lookahead: \w+(?=\d) corresponde a uma palavra apenas se ela for imediatamente seguida por um dígito, mas o dígito não faz parte da correspondência. O lookbehind é semelhante em função, mas atua na direção oposta.

1234567891011121314
import re # Lookahead: Match words followed by a digit text = "apple1 banana2 cherry pie" pattern_lookahead = r"\w+(?=\d)" matches_lookahead = re.findall(pattern_lookahead, text) print("Lookahead matches:", matches_lookahead) # Non-greedy matching: Extract text between tags html = "<b>Bold</b> and <b>Strong</b>" pattern_nongreedy = r"<b>(.*?)</b>" matches_nongreedy = re.findall(pattern_nongreedy, html) print("Non-greedy matches:", matches_nongreedy)

Como Lookahead e Quantificadores Não Gananciosos Afetam a Correspondência de Padrões

O padrão lookahead \w+(?=\d) no exemplo corresponde a qualquer sequência de caracteres de palavra (\w+) apenas se for diretamente seguida por um dígito (\d). O resultado correspondente não inclui o dígito, pois o lookahead não consome os caracteres que verifica. Isso é útil quando se deseja encontrar palavras que atendam a uma determinada condição sobre o que vem a seguir, sem incluir essa parte seguinte na correspondência.

O quantificador não ganancioso *? em <b>(.*?)</b> altera a quantidade de texto correspondida entre as tags <b> e </b>. Um quantificador ganancioso como .* corresponderia ao máximo possível, potencialmente capturando tudo do primeiro <b> até o último </b>. Ao usar *?, o padrão corresponde ao mínimo possível, capturando apenas o texto dentro de cada par de tags individualmente. Isso evita correspondências excessivas e garante a extração do menor trecho correspondente possível.

Lookahead e quantificadores não gananciosos oferecem controle poderoso sobre como suas expressões regulares selecionam o texto:

  • Lookahead permite afirmar que uma correspondência é seguida por um padrão específico sem incluí-lo;
  • Quantificadores não gananciosos ajudam a evitar capturar mais texto do que o necessário.
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 1
some-alt