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)A
Linguagem 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:
200
Linguagem 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...\b
corresponde à 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)A
Linguagem de código: C# ( cs )
Nesta sintaxe, a expressão regular corresponde A
se 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 10
em uma string de entrada, não ao número 200
precedido 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:
10
Linguagem 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.