C# Regex Antecipado

Resumo : neste tutorial, você aprenderá como usar C# regex lookahead na expressão regular para corresponder apenas se ela for seguida por outro padrão.

Introdução ao C# Regex Lookahead

O regex lookahead é um recurso em expressões regulares que permite corresponder A apenas se ele for seguido por B. A sintaxe do regex lookahead é a seguinte:

A(?=B)Linguagem de código:  C#  ( cs )

Este lookahead de regex corresponde a A somente se for seguido por B.

Suponha que você tenha a seguinte string:

"1 shark is 5 feet long"Linguagem de código:  C#  ( cs )

E você deseja corresponder ao número 5 que é seguido por um espaço e a string literal “pés”, mas não o número 1. Para fazer isso, você pode usar o lookahead de regex assim:

\d+(?=\s*feet)Linguagem de código:  C#  ( cs )

Este padrão de expressão regular corresponde a um ou mais dígitos, mas apenas se eles forem seguidos por zero ou mais caracteres de espaço em branco e pela palavra “pés”.

Aqui está o programa:

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


var text = "1 shark is 5 feet long";
var pattern = @"\d+(?=\s*feet)";

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

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

C# Regex múltiplos lookaheads

Expressões regulares oferecem suporte a vários lookaheads com a seguinte sintaxe:

A(?=B)(?=C)Linguagem de código:  C#  ( cs )

Nesta sintaxe, temos dois lookaheads. A A(?=B)(?=C)expressão regular corresponde ao padrão Ase for seguida por Be C.

Aqui está como o mecanismo regex processa:

  • Primeiro, combine o padrão A.
  • Em segundo lugar, avalie o primeiro lookahead (?=B)na posição imediatamente após A. Se não corresponder, o mecanismo regex será interrompido.
  • Terceiro, avalie o segundo lookahead (?=C)na posição imediatamente após B. Se não corresponder, o mecanismo regex será interrompido.
  • Finalmente, se ambos os testes forem aprovados, o mecanismo regex retornará a correspondência para o padrão A.

Em teoria, você pode ter quantas antecipações quiser.

Lookaheads negativos de Regex

Lookahead negativo nega um lookahead. Corresponde a A apenas se não for seguido por B:

A(?!B)Linguagem de código:  C#  ( cs )

Lookaheads negativos são úteis quando você deseja especificar exclusões em seus padrões de expressão regular. Eles ajudam você a encontrar correspondências que não possuem determinados padrões.

O exemplo a seguir usa uma antecipação negativa em uma expressão regular para corresponder a um número que não é seguido pela palavra “pés”:

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


var text = "1 shark is 5 feet long";
var pattern = @"\d+(?!\s*feet)";

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

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

Saída:

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

Resumo

  • Use lookahead negativo A(?=B)em expressões regulares para corresponder a A somente se ele for seguido por B.
  • Use lookahead negativo A(?!B)em expressões regulares para corresponder a A somente se ele não for seguido por B.

Deixe um comentário

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