English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Regulärer Ausdruck

Regulärer Ausdruck Es ist ein Muster zur Übereinstimmung von Eingabe-Text.

Das .Net-Framework bietet einen regulären Ausdrucks-Engine, die solche Übereinstimmungen ermöglicht.

Ein Muster besteht aus einem oder mehreren Zeichen, Operatoren und Strukturen.

Definition regulärer Ausdrücke

Nachstehend sind die verschiedenen Kategorien von Zeichen, Operatoren und Strukturen aufgeführt, die zur Definition regulärer Ausdrücke verwendet werden.

  • Zeichen-Flucht

  • Zeichenklasse

  • 定位点

  • 分组构造

  • Beschränkungszeichen

  • Rückverweisungskonstruktion

  • Ersatzkonstruktion

  • Replacement

  • Miscellaneous constructions

Zeichen-Flucht

Das Backslash-Zeichen (\) in regulären Ausdrücken weist darauf hin, dass das folgende Zeichen ein spezielles Zeichen ist oder dass dieses Zeichen wörtlich interpretiert werden soll.

Die folgende Tabelle zeigt die Escape-Zeichen an:

Escape-ZeichenDescriptionPatternPassen
\aMit dem Warnton (bell) Symbol \u0007 Stimmt überein.\a"Warning!" + '\u0007' im "\u0007"
\bIn der Zeichenklasse mit der Rücktaste \u0008 Stimmt überein.[\b]{3,}"\b\b\b\b" im "\b\b\b\b"
\tMit dem Tabulator \u0009 Stimmt überein.(\w+)\t"Name\tAddr\t" im "Name\t" und "Addr\t"
\rMit dem Rückgabetaste \u000D übereinstimmen. (\r und Zeilenumbruch \n sind nicht äquivalent.)\r\n(\w+)"\r\nHello\nWorld." im "\r\nHello"
\vMit dem Vertikaltabulator \u000B übereinstimmen.[\v]{2,}"\v\v\v" im "\v\v\v"
\fMit dem Seitenumbruch \u000C übereinstimmen.[\f]{2,}"\f\f\f" im "\f\f\f"
\nMit dem Zeilenumbruch \u000A übereinstimmen.\r\n(\w+)"\r\nHello\nWorld." im "\r\nHello"
\eMit dem Escape-Zeichen \u001B stimmt überein.\e"\x001B" im "\x001B"
\ nnnEin Zeichen mit oktadischer Darstellung zu spezifizieren (nnn besteht aus zwei bis drei Ziffern).\w\040\wDas "a b" in "a bc d" und das "c d"
\x nnEin Zeichen mit hexadezimaler Darstellung zu spezifizieren (nn besteht aus genau zwei Ziffern).\w\x20\wDas "a b" in "a bc d" und das "c d"
\c X \c xMit dem ASCII-Kontrollzeichen, das von X oder x angegeben wird, übereinstimmen, wobei X oder x das Alphabet des Kontrollzeichens ist.\cC"\x0003" im "\x0003" (Ctrl-C)
\u nnnnEin Unicode-Zeichen mit hexadezimaler Darstellung zu passen (dargestellt durch vierstellige Zahl nnnn).\w\u0020\wDas "a b" in "a bc d" und das "c d"
\Stimmt mit dem Zeichen überein, das nach einem nicht erkannten Escape-Zeichen folgt.\d+[\+-x\*]\d+\d+[\+-x\*\d+"(2+2) * 3*9" im "2+2" and "3*9"

Zeichenklasse

Zeichenklassen stimmen mit jedem Zeichen einer Zeichengruppe überein.

Die folgende Tabelle zeigt die Zeichenklassen an:

ZeichenklasseDescriptionPatternPassen
[character_group]Mit jedem einzelnen Zeichen in character_group übereinstimmen. Standardmäßig ist die Übereinstimmung groß- und kleinschreibungsabhängig.[mn]Das "m" in "mat", das "m" in "moon" und das "n"
[^character_group]Nicht: Mit jedem einzelnen Zeichen, das nicht in character_group enthalten ist. Standardmäßig sind die Zeichen in character_group groß- und kleinschreibungsabhängig.[^aei]"avail" 中的 "v" 和 "l"
[ first - last ]字符范围:与从 first 到 last 的范围中的任何单个字符匹配。[b-d][b-d]irds 可以匹配 Birds、 Cirds、 Dirds
.通配符:与除 \n 之外的任何单个字符匹配。
若要匹配原意句点字符(. 或 \u002E),您必须在该字符前面加上转义符 (\.)。
a.e"have" 中的 "ave", "mate" 中的 "ate"
\p{ name }name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。\p{Lu}"City Lights" 中的 "C" 和 "L"
\P{ name }与不在 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。\P{Lu}"City" 中的 "i"、 "t" 和 "y"
\w与任何单词字符匹配。\w"Room#1" 中的 "R"、 "o"、 "m" 和 "1"
\W与任何非单词字符匹配。\W"Room#1" 中的 "#"
\s与任何空白字符匹配。\w\s"ID A1.3" 中的 "D "
\S与任何非空白字符匹配。\s\S"int __ctr" 中的 " _"
\d与任何十进制数字匹配。\d"4 = IV" 中的 "4"
\D匹配不是十进制数的任意字符。\D"4 = IV" 中的 " "、 "="、 " "、 "I" 和 "V"

定位点

定位点或原子零宽度断言会使匹配成功或失败,具体取决于字符串中的当前位置,但它们不会使引擎在字符串中前进或使用字符。

下表列出了定位点:

断言DescriptionPatternPassen
^匹配必须从字符串或一行的开头开始。^\d{3}"567-777-" im "567"
$匹配必须出现在字符串的末尾或出现在行或字符串末尾的 \n 之前。-\d{4}$"8-12-2012" im "-2012"
\A匹配必须出现在字符串的开头。\A\w{4}"Code-007-" 中的 "Code"
\Z匹配必须出现在字符串的末尾或出现在字符串末尾的 \n 之前。-\d{3}\Z"Bond-901-007" im "-007"
\z匹配必须出现在字符串的末尾。-\d{3}\z"-901-333" im "-333"
\G匹配必须出现在上一个匹配结束的地方。\G(\d\)"(1)(3)(5)[7]、 (9)中的 (1)、 (3)" und "("5)"
\b匹配一个单词边界,也就是指单词和空格间的位置。er\b匹配"never"中的"er",但不能匹配"verb"中的"er"。
\B匹配非单词边界。er\B匹配"verb"中的"er",但不能匹配"never"中的"er"。

分组构造

分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。

下表列出了分组构造:

分组构造DescriptionPatternPassen
( subexpression )捕获匹配的子表达式并将其分配到一个从零开始的序号中。(\w)1"deep" 中的 "ee"
(?< name >subexpression)将匹配的子表达式捕获到一个命名组中。(?< double>\w)\k< double>"deep" 中的 "ee"
(?< name1 -name2 >subexpression)定义平衡组定义。(((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$"3+2^((1-3)*(3-1))" 中的 "("1-3)*(3-1))"
(?: subexpression)定义非捕获组。Write(?:Line)?"Console.WriteLine()" 中的 "WriteLine"
(?imnsx-imnsx:subexpression)应用或禁用 subexpression 中指定的选项。A\d{2}(?i:\w+)\b"A12xl A12XL a12xl" 内的 "A"12xl" und "A12XL"
(?= subexpression)零宽度正预测先行断言。\w+(?=\.)"He is. The dog ran. The sun is out." 中的 "is"、 "ran" 和 "out"
(?! subexpression)零宽度负预测先行断言。\b(?!un)\w+\b"unsure sure unity used" 中的 "sure" 和 "used"
(?<=subexpression)零宽度正回顾后发断言。(?A+B+)"1ABB 3ABBC 5AB 5"AC" 内的 "1ABB", "3ABB" und "5AB"
using System;
using System.Text.RegularExpressions;
public class Example
{
   public static void Main()
   {
      string input = "1851 1999 1950 1905 2003";
      string pattern = @"(?<=19)\d{2}\b";
      foreach (Match match in Regex.Matches(input, pattern))
         Console.WriteLine(match.Value);
   }
}


Laufbeispiel »

Beschränkungszeichen

Beschränkungszeichen spezifizieren, wie viele Beispiele des vorherigen Elements (kann ein Zeichen, eine Gruppe oder eine Zeichengruppe sein) im Eingabezeichenfolgen existieren müssen, um eine Übereinstimmung zu erzeugen. Beschränkungszeichen umfassen die in der folgenden Tabelle aufgeführten sprachlichen Elemente.

Die folgende Tabelle listet die Beschränkungszeichen auf:

BeschränkungszeichenDescriptionPatternPassen
*Passt das vorherige Element null oder mehrmals an.\d*.\d".0"、 "19.9"、 "219.9"
+Passt das vorherige Element einmal oder mehrmals an."be+""been" im "bee", "bent" im "be"
?Passt das vorherige Element null oder einmal an."rai?n""ran"、 "rain"
{ n }Passt das vorherige Element genau n Mal an.",\d{3}"1,043.6" im",043", "9,876,543,210" im ",876"、 ",543" und ",210"
{ n ,}Passt das vorherige Element mindestens n Mal an."\d{2,}""166"、 "29"、 "1930"
{ n , m }Passt das vorherige Element mindestens n Mal an, aber nicht mehr als m Mal."\d{3,5}"166", "17668", "193024" im "19302"
*?Passt das vorherige Element null oder mehrmals an, aber so wenig wie möglich.\d*?\.\d".0"、 "19.9"、 "219.9"
+?Passt das vorherige Element einmal oder mehrmals an, aber so wenig wie möglich."be+?""been" im "be", "bent" im "be"
??Passt das vorherige Element null oder einmal an, aber so wenig wie möglich."rai??n""ran"、 "rain"
{ n }?Passt die Anzahl der Wiederholungen des führenden Elements genau n Mal an.",\d{3}?""1,043.6" im",043", "9,876,543,210" im ",876"、 ",543" und ",210"
{ n ,}?Passt die Anzahl der Wiederholungen des vorherigen Elements mindestens n Mal an, aber so wenig wie möglich."\d{2,}?""166"、 "29" and "1930"
{ n , m }?Passt die Anzahl der Wiederholungen des vorherigen Elements zwischen n und m an, aber so wenig wie möglich."\d{3,5}?""166", "17668", "193024" im "193" und "024"

Rückverweisungskonstruktion

Rückverweisungen erlauben es, im selben regulären Ausdruck später identifizierte vorausgegangene Unterexpressions zu kennzeichnen.

Die folgende Tabelle listet die Rückverweisungskonstruktionen auf:

RückverweisungskonstruktionDescriptionPatternPassen
\ numberRückverweisung. Passt den Wert des nummerierten Unterexpressions an.(\w)1"seek" im "ee"
\k< name >Namentliche Rückverweisung. Passt den Wert der benannten Ausdrucksweise an.(?< char>\w)\k< char>"seek" im "ee"

Ersatzkonstruktion

Ersatzkonstruktionen dienen dazu, reguläre Ausdrücke zu ändern, um either zu aktivieren./oder passen.

Die folgende Tabelle listet die Ersatzkonstruktionen auf:

ErsatzkonstruktionDescriptionPatternPassen
|Passen Sie einen beliebigen Element, das durch das vertikale Strichsymbol (|) getrennt ist.th(e|is|at)"this is the day." for "the" and "this"
(?( expression )yes | no )If the regular expression pattern is matched by expression, then match yes; otherwise match the optional no Part. expression is interpreted as a zero-width assertion.(?(A)A\d{2}\b|\b\d{3}\b)"A10 C103 910" in "10" and "910"
(?( name )yes | no )If the named or numbered capture group has a match, then match yes; otherwise match the optional no.(?< quoted>")?(?(quoted).+?"|\S+\s)"Dogs.jpg "Yiska playing.jpg"" of Dogs.jpg and "Yiska playing.jpg"

Replacement

Replacement is the regular expression used in the replacement pattern.

The following table lists characters used for replacement:

CharacterDescriptionPatternReplacement patternInput stringResulting string
$numberReplace by group number Matched substring.\b(\w+)(\s)(\w+)\b$3$2$1"one two""two one"
${name}Replace by named group name Matched substring.\b(?< word1>\w+)(\s)(?< word2>\w+)\b${word2} ${word1}"one two""two one"
$$Replace the character '"$"'.\b(\d+)\s?USD$$$1"103 USD""$103"
$&Replace a copy of the entire matched item.(\$*(\d*(\.+\d+)?){1)**$&"$1.30""**$1.30**"
$`Replace all text before the match.B+$`"AABBCC""AAAACC"
$'Replace all text after the match.B+$'"AABBCC""AACCCC"
$+Replace the last captured group.B+(C+)$+"AABBCCDD"AACCDD
$_Replace the entire input string.B+$_"AABBCC""AAAABBCCCC"

Miscellaneous constructions

The following table lists various miscellaneous constructions:

ConstructionDescriptionBeispiel
(?imnsx-imnsx)Set or disable options such as case-insensitive in the middle of the pattern.\bA(?i)b\w+\b Match 'ABA Able Act' for 'ABA' and 'Able'
(?#Comment)Inline comment. This comment ends at the first right parenthesis.\bA(?#Match words starting with 'A')\w+\b
#}} [End of line]This comment starts with a non-escaped # and continues to the end of the line.(?x)\bA\w+\b#Matches words that start with A

Regex class

The Regex class is used to represent a regular expression.

The following table lists some commonly used methods in the Regex class:

NumberMethod & Description
1public bool IsMatch( string input )
Indicate whether the regular expression specified in the Regex constructor is found in the specified input string.
2public bool IsMatch( string input, int startat )
Indicate whether the regular expression specified in the Regex constructor is found in the specified input string starting from the specified start position.
3public static bool IsMatch( string input, string pattern )
Indicate whether the specified regular expression is found in the specified input string.
4public MatchCollection Matches( string input )
Search for all occurrences of the regular expression in the specified input string.
5public string Replace( string input, string replacement )
Replace all occurrences of the regular expression pattern in the specified input string with the specified replacement string.
6public string[] Split( string input )
Split the input string into an array of substrings based on the positions defined by the regular expression pattern specified in the Regex constructor.

For a complete list of properties of the Regex class, please refer to Microsoft's C# documentation.

Beispiel 1

The following example matches words that start with 'S':

Online Example

using System;
using System.Text.RegularExpressions;
namespace RegExApplication
{
   class Program
   {
      private static void showMatch(string text, string expr)
      {
         Console.WriteLine("The Expression: ") + expr);
         MatchCollection mc = Regex.Matches(text, expr);
         foreach (Match m in mc)
         {
            Console.WriteLine(m);
         }
      }
      static void Main(string[] args)
      {
         string str = "A Thousand Splendid Suns";
         Console.WriteLine("Wörter, die mit 'S' beginnen:");
         showMatch(str, @"\bS\S*");
         Console.ReadKey();
      }
   }
}

Wenn der obige Code kompiliert und ausgeführt wird, ergibt er das folgende Ergebnis:

Wörter, die mit 'S' beginnen, werden übereinstimmen:
Die Ausdrucksweise: \bS\S*
Prächtig
Suns

Beispiel 2

Nachfolgender Beispiel entspricht Wörtern, die mit 'm' beginnen und mit 'e' enden:

using System;
using System.Text.RegularExpressions;
namespace RegExApplication
{
   class Program
   {
      private static void showMatch(string text, string expr)
      {
         Console.WriteLine("Die Ausdrucksweise: " + expr);
         MatchCollection mc = Regex.Matches(text, expr);
         foreach (Match m in mc)
         {
            Console.WriteLine(m);
         }
      }
      static void Main(string[] args)
      {
         string str = "machen Labyrinth und verwalten, es zu messen";
         Console.WriteLine("Wörter, die mit 'm' beginnen und mit 'e' enden:");
         showMatch(str, @"\bm\S*e\b");
         Console.ReadKey();
      }
   }
}

Wenn der obige Code kompiliert und ausgeführt wird, ergibt er das folgende Ergebnis:

Wörter, die mit 'm' beginnen und mit 'e' enden, werden übereinstimmen:
Die Ausdrucksweise: \bm\S*e\b
machen
Labyrinth
verwalten
maß

Beispiel 3

Nachfolgender Beispiel ersetzt überflüssige Leerzeichen:

using System;
using System.Text.RegularExpressions;
namespace RegExApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         string input = "Hello  World  ";
         string pattern = "\\s"+";
         string replacement = " ";
         Regex rgx = new Regex(pattern);
         string result = rgx.Replace(input, replacement);
         Console.WriteLine("Original String: {0}", input);
         Console.WriteLine("Ersetzung String: {0}", result);    
         Console.ReadKey();
      }
   }
}

Wenn der obige Code kompiliert und ausgeführt wird, ergibt er das folgende Ergebnis:

Original String: Hello   World   
Ersetzung String: Hello World