C# Regex Lookbehind

Summary: in this tutorial, you will learn about the C# regex lookbehind to match a pattern only if it is preceded by another pattern.

Introduction to the C# regex lookbehind

Regex lookbehind allows you to specify a pattern to match only if it is preceded by another pattern. In simple terms, a regex lookbehind matches A only if it is preceded by B:

(?<=B)ACode language: C# (cs)

The following example shows how to use a lookbehind to match a number that is followed by a $ sign:

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);
}Code language: C# (cs)

Output:

200Code language: C# (cs)

In this example, we use the (?<=\$)\d+ regular expression pattern that contains a look behind:

  • \b is a word boundary , the \b...\b matches the whole word.
  • (?<=\$) is a lookbehind that checks if the current position is preceded by a dollar sign ($) character. Because $ is a metacharacter in a regular expression, we need to escape it using a backslash character (\) so that $ will be treated as a literal string.
  • \d+ is a digit character class that matches one or more digits.

Negative lookbehind

A negative lookbehind negates a lookbehind. In other words, a negative lookbehind allows you to specify a pattern to match only if it is not preceded by another pattern:

(?<!B)ACode language: C# (cs)

In this syntax, the regular expression matches A if it is not preceded by B. Note that ! is used instead of = character.

The following example uses a negative lookbehind to match the number 10 in an input string, not the number 200 that is preceded by the $ sign:

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);
}Code language: C# (cs)

Output:

10Code language: C# (cs)

Summary

  • Use regex lookbehind to match a pattern that is preceded by another pattern.
  • Use a negative lookbehind to match a pattern that is not preceded by another pattern.
Was this tutorial helpful ?