C# Regex Lookbehind

Resumo : neste tutorial, você aprenderá sobre o lookbehind de regex C# para corresponder a um padrão apenas se ele for precedido por outro padrão.

Introdução ao lookbehind de regex C#

O lookbehind Regex permite que você especifique um padrão para corresponder apenas se for precedido por outro padrão. Em termos simples, um lookbehind de regex corresponde a A somente se for precedido por B:

(?<=B)ALinguagem de código:  C#  ( cs )

O exemplo a seguir mostra como usar um lookbehind para corresponder a um número seguido por um $sinal:

using System.Text.RegularExpressions;
using static System.Console;


var text = "10 books cost $200";
var pattern = @"\b(?<=\$)\d+\b";

var matches = Regex.Matches(text, pattern);

foreach (var match in matches)
{
    WriteLine(match);
}Linguagem de código:  C#  ( cs )

Saída:

200Linguagem de código:  C#  ( cs )

Neste exemplo, usamos o (?<=\$)\d+padrão de expressão regular que contém um olhar por trás:

  • \bé um limite de palavra , \b...\bcorresponde à palavra inteira.
  • (?<=\$)é um lookbehind que verifica se a posição atual é precedida por um $caractere de cifrão ( ). Como $é um metacaractere em uma expressão regular, precisamos escapá-lo usando uma barra invertida ( \) para que $seja tratado como uma string literal.
  • \d+é uma classe de caracteres de dígito que corresponde a um ou mais dígitos.

Olhar negativo para trás

Um lookbehind negativo nega um lookbehind. Em outras palavras, um lookbehind negativo permite especificar um padrão para correspondência somente se não for precedido por outro padrão:

(?<!B)ALinguagem de código:  C#  ( cs )

Nesta sintaxe, a expressão regular corresponde Ase não for precedida por B. Observe que !é usado em vez de =caractere.

O exemplo a seguir usa um lookbehind negativo para corresponder ao número 10em uma string de entrada, não ao número 200precedido pelo $sinal:

using System.Text.RegularExpressions;
using static System.Console;


var text = "10 books cost $200";
var pattern = @"\b(?<!\$)\d+\b";

var matches = Regex.Matches(text, pattern);

foreach (var match in matches)
{
    WriteLine(match);
}Linguagem de código:  C#  ( cs )

Saída:

10Linguagem de código:  C#  ( cs )

Resumo

  • Use regex lookbehind para corresponder a um padrão precedido por outro padrão.
  • Use um lookbehind negativo para corresponder a um padrão que não seja precedido por outro padrão.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *