Wyrażeń regularnych programu .NET.NET Regular Expressions

Wyrażenia regularne umożliwiają wydajne, elastyczne i wydajne przetwarzanie tekstu.Regular expressions provide a powerful, flexible, and efficient method for processing text. Rozbudowana notacji dopasowywanie do wzorca wyrażeń regularnych umożliwia szybkie analizy dużych ilości tekst do znalezienia wzorce określonego znaku; Aby sprawdzić poprawność tekstu, aby upewnić się, że jest zgodna z wzorcem wstępnie zdefiniowane (takie jak adres e-mail); do wyodrębnienia, Edycja, Zamień lub usuń tekst podciągów; i dodać wyodrębnione ciągi do kolekcji w celu wygenerowania raportu.The extensive pattern-matching notation of regular expressions enables you to quickly parse large amounts of text to find specific character patterns; to validate text to ensure that it matches a predefined pattern (such as an email address); to extract, edit, replace, or delete text substrings; and to add the extracted strings to a collection in order to generate a report. Dla wielu aplikacji, które zajmują się ciągów lub który analizy dużych bloków tekstu i wyrażenia regularne są niezbędne narzędzia.For many applications that deal with strings or that parse large blocks of text, regular expressions are an indispensable tool.

Sposób, a jaki działają wyrażenia regularneHow Regular Expressions Work

Aparat wyrażeń regularnych, która jest reprezentowana przez jest bezpośrednio tekstu przetwarzania za pomocą wyrażeń regularnych System.Text.RegularExpressions.Regex obiektu .NET.The centerpiece of text processing with regular expressions is the regular expression engine, which is represented by the System.Text.RegularExpressions.Regex object in .NET. Co najmniej przetwarzania tekstu za pomocą wyrażeń regularnych wymaga podania aparat wyrażeń regularnych z poniższych dwóch elementów informacji:At a minimum, processing text using regular expressions requires that the regular expression engine be provided with the following two items of information:

  • Wzorzec wyrażenia regularnego, aby zidentyfikować w tekście.The regular expression pattern to identify in the text.

    W środowisku .NET wyrażenie regularne wzorce są definiowane przez specjalne składni lub język, który jest zgodny z wyrażeniami regularnymi Perl 5 i dodaje niektóre dodatkowe funkcje, takie jak Dopasowywanie od prawej do lewej.In .NET, regular expression patterns are defined by a special syntax or language, which is compatible with Perl 5 regular expressions and adds some additional features such as right-to-left matching. Aby uzyskać więcej informacji, zobacz język wyrażeń regularnych — podręczny wykaz.For more information, see Regular Expression Language - Quick Reference.

  • Tekst, który można przeanalizować elementu wzorzec wyrażenia regularnego.The text to parse for the regular expression pattern.

Metody Regex klasy umożliwiają wykonywanie następujących czynności:The methods of the Regex class let you perform the following operations:

Omówienie model obiektów wyrażeń regularnych, zobacz Model obiektów wyrażeń regularnych.For an overview of the regular expression object model, see The Regular Expression Object Model.

Aby uzyskać więcej informacji na temat języka wyrażeń regularnych, zobacz język wyrażeń regularnych — podręczny wykaz lub pobrać i wydrukować jeden z tych broszury:For more information about the regular expression language, see Regular Expression Language - Quick Reference or download and print one of these brochures:

Krótki przewodnik w formacie programu Word (.docx)Quick Reference in Word (.docx) format
Krótki przewodnik w formacie PDF (PDF)Quick Reference in PDF (.pdf) format

Przykłady wyrażeń regularnychRegular Expression Examples

String Klasa zawiera wiele metod wyszukiwania i zamiany ciągów, których można użyć, aby zlokalizować ciągi literału ciągu większy.The String class includes a number of string search and replacement methods that you can use when you want to locate literal strings in a larger string. Wyrażenia regularne są najbardziej przydatne, aby zlokalizować jednego z kilku podciągów w ciągu większy lub gdy chcesz zidentyfikować wzorce w ciągu, jak poniższe przykłady przedstawiają.Regular expressions are most useful either when you want to locate one of several substrings in a larger string, or when you want to identify patterns in a string, as the following examples illustrate.

Przykład 1: Zamienianie podciągówExample 1: Replacing Substrings

Założono, że listy adresowej zawiera nazwy zawierające czasami tytuł (p., chybienie lub Pani Ms.) wraz z imię i nazwisko.Assume that a mailing list contains names that sometimes include a title (Mr., Mrs., Miss, or Ms.) along with a first and last name. Jeśli nie chcesz zawierają tytuły podczas generowania schematu envelope etykiety z listy, możesz użycie wyrażenia regularnego do usunięcia tytuły, jak pokazano w poniższym przykładzie.If you do not want to include the titles when you generate envelope labels from the list, you can use a regular expression to remove the titles, as the following example illustrates.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = "(Mr\\.? |Mrs\\.? |Miss |Ms\\.? )";
      string[] names = { "Mr. Henry Hunt", "Ms. Sara Samuels", 
                         "Abraham Adams", "Ms. Nicole Norris" };
      foreach (string name in names)
         Console.WriteLine(Regex.Replace(name, pattern, String.Empty));
   }
}
// The example displays the following output:
//    Henry Hunt
//    Sara Samuels
//    Abraham Adams
//    Nicole Norris
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "(Mr\.? |Mrs\.? |Miss |Ms\.? )"
      Dim names() As String = { "Mr. Henry Hunt", "Ms. Sara Samuels", _
                                "Abraham Adams", "Ms. Nicole Norris" }
      For Each name As String In names
         Console.WriteLine(Regex.Replace(name, pattern, String.Empty))
      Next                                
   End Sub
End Module
' The example displays the following output:
'    Henry Hunt
'    Sara Samuels
'    Abraham Adams
'    Nicole Norris

Wzorzec wyrażenia regularnego(Mr\.? |Mrs\.? |Miss |Ms\.? ) dopasowuje wszystkie wystąpienia "Mr", "P.", "Pani", "Pani", "Chybienie", "Ms lub"Ms.".The regular expression pattern(Mr\.? |Mrs\.? |Miss |Ms\.? ) matches any occurrence of "Mr ", "Mr. ", "Mrs ", "Mrs. ", "Miss ", "Ms or "Ms. ". Wywołanie Regex.Replace metoda zastępuje dopasowany ciąg z String.Empty; innymi słowy, usuwa ją z oryginalnego ciągu.The call to the Regex.Replace method replaces the matched string with String.Empty; in other words, it removes it from the original string.

Przykład 2: Identyfikowanie zduplikowanych słówExample 2: Identifying Duplicated Words

Przypadkowo duplikowanie słowa jest typowym błędem że autorów.Accidentally duplicating words is a common error that writers make. Wyrażenie regularne można zidentyfikować zduplikowane wyrazy, jak przedstawiono na poniższym przykładzie.A regular expression can be used to identify duplicated words, as the following example shows.

using System;
using System.Text.RegularExpressions;

public class Class1
{
   public static void Main()
   {
      string pattern = @"\b(\w+?)\s\1\b";
      string input = "This this is a nice day. What about this? This tastes good. I saw a a dog.";
      foreach (Match match in Regex.Matches(input, pattern, RegexOptions.IgnoreCase))
         Console.WriteLine("{0} (duplicates '{1}') at position {2}", 
                           match.Value, match.Groups[1].Value, match.Index);
   }
}
// The example displays the following output:
//       This this (duplicates 'This') at position 0
//       a a (duplicates 'a') at position 66
Imports System.Text.RegularExpressions

Module modMain
   Public Sub Main()
      Dim pattern As String = "\b(\w+?)\s\1\b"
      Dim input As String = "This this is a nice day. What about this? This tastes good. I saw a a dog."
      For Each match As Match In Regex.Matches(input, pattern, RegexOptions.IgnoreCase)
         Console.WriteLine("{0} (duplicates '{1}') at position {2}", _
                           match.Value, match.Groups(1).Value, match.Index)
      Next
   End Sub
End Module
' The example displays the following output:
'       This this (duplicates 'This') at position 0
'       a a (duplicates 'a') at position 66

Wzorzec wyrażenia regularnego \b(\w+?)\s\1\b może zostać zinterpretowany w następujący sposób:The regular expression pattern \b(\w+?)\s\1\b can be interpreted as follows:

\b Rozpoczyna na granicy wyrazu.Start at a word boundary.
(\w+?)(\w+?) Zgodne z co najmniej jeden znak słowa, ale liczbę znaków, jak to możliwe.Match one or more word characters, but as few characters as possible. Razem tworzą grupy, które mogą być określone jako \1.Together, they form a group that can be referred to as \1.
\s Dopasowuje znak odstępu.Match a white-space character.
\1 Pasuje do podciągu, który jest taki sam, jak grupę o nazwie \1.Match the substring that is equal to the group named \1.
\b Dopasowuje granicę wyrazu.Match a word boundary.

Regex.Matches Metoda jest wywoływana z ustawioną opcje wyrażeń regularnych RegexOptions.IgnoreCase.The Regex.Matches method is called with regular expression options set to RegexOptions.IgnoreCase. W związku z tym operacja dopasowania jest rozróżniana wielkość liter, a przykład identyfikuje podciąg "To to" jako dublowania.Therefore, the match operation is case-insensitive, and the example identifies the substring "This this" as a duplication.

Należy pamiętać, że ciąg wejściowy zawiera podciąg "to?Note that the input string includes the substring "this? To".This". Jednak ze względu na pośredniczące znak interpunkcyjny, jest nie identyfikowane jako dublowania.However, because of the intervening punctuation mark, it is not identified as a duplication.

Przykład 3: Dynamicznie tworzenie wyrażenia regularnego z uwzględnieniem wrażliwość na ustawienia kulturoweExample 3: Dynamically Building a Culture-Sensitive Regular Expression

Poniższy przykład przedstawia możliwości wyrażeń regularnych w połączeniu z elastycznością oferowane przez. Funkcje globalizacji w sieci.The following example illustrates the power of regular expressions combined with the flexibility offered by .NET's globalization features. Używa NumberFormatInfo obiektem, aby określić format wartości waluty w systemie bieżącej kultury.It uses the NumberFormatInfo object to determine the format of currency values in the system's current culture. Następnie używa tych informacji do dynamicznie utworzyć wyrażenie regularne, która wyodrębnia wartości waluty w tekście.It then uses that information to dynamically construct a regular expression that extracts currency values from the text. Dla każdego dopasowania wyodrębniane podgrupę, która zawiera tylko ciągi numeryczne, konwertuje go do Decimal wartość, a następnie oblicza sumę bieżącą.For each match, it extracts the subgroup that contains the numeric string only, converts it to a Decimal value, and calculates a running total.

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      // Define text to be parsed.
      string input = "Office expenses on 2/13/2008:\n" + 
                     "Paper (500 sheets)                      $3.95\n" + 
                     "Pencils (box of 10)                     $1.00\n" + 
                     "Pens (box of 10)                        $4.49\n" + 
                     "Erasers                                 $2.19\n" + 
                     "Ink jet printer                        $69.95\n\n" + 
                     "Total Expenses                        $ 81.58\n"; 
      
      // Get current culture's NumberFormatInfo object.
      NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat;
      // Assign needed property values to variables.
      string currencySymbol = nfi.CurrencySymbol;
      bool symbolPrecedesIfPositive = nfi.CurrencyPositivePattern % 2 == 0;
      string groupSeparator = nfi.CurrencyGroupSeparator;
      string decimalSeparator = nfi.CurrencyDecimalSeparator;

      // Form regular expression pattern.
      string pattern = Regex.Escape( symbolPrecedesIfPositive ? currencySymbol : "") + 
                       @"\s*[-+]?" + "([0-9]{0,3}(" + groupSeparator + "[0-9]{3})*(" + 
                       Regex.Escape(decimalSeparator) + "[0-9]+)?)" + 
                       (! symbolPrecedesIfPositive ? currencySymbol : ""); 
      Console.WriteLine( "The regular expression pattern is:");
      Console.WriteLine("   " + pattern);      

      // Get text that matches regular expression pattern.
      MatchCollection matches = Regex.Matches(input, pattern, 
                                              RegexOptions.IgnorePatternWhitespace);               
      Console.WriteLine("Found {0} matches.", matches.Count); 

      // Get numeric string, convert it to a value, and add it to List object.
      List<decimal> expenses = new List<Decimal>();
                     
      foreach (Match match in matches)
         expenses.Add(Decimal.Parse(match.Groups[1].Value));      

      // Determine whether total is present and if present, whether it is correct.
      decimal total = 0;
      foreach (decimal value in expenses)
         total += value;
      
      if (total / 2 == expenses[expenses.Count - 1]) 
         Console.WriteLine("The expenses total {0:C2}.", expenses[expenses.Count - 1]);
      else
         Console.WriteLine("The expenses total {0:C2}.", total);
   }  
}
// The example displays the following output:
//       The regular expression pattern is:
//          \$\s*[-+]?([0-9]{0,3}(,[0-9]{3})*(\.[0-9]+)?)
//       Found 6 matches.
//       The expenses total $81.58.
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Text.RegularExpressions

Public Module Example
   Public Sub Main()
      ' Define text to be parsed.
      Dim input As String = "Office expenses on 2/13/2008:" + vbCrLf + _
                            "Paper (500 sheets)                      $3.95" + vbCrLf + _
                            "Pencils (box of 10)                     $1.00" + vbCrLf + _
                            "Pens (box of 10)                        $4.49" + vbCrLf + _
                            "Erasers                                 $2.19" + vbCrLf + _
                            "Ink jet printer                        $69.95" + vbCrLf + vbCrLf + _
                            "Total Expenses                        $ 81.58" + vbCrLf
      ' Get current culture's NumberFormatInfo object.
      Dim nfi As NumberFormatInfo = CultureInfo.CurrentCulture.NumberFormat
      ' Assign needed property values to variables.
      Dim currencySymbol As String = nfi.CurrencySymbol
      Dim symbolPrecedesIfPositive As Boolean = CBool(nfi.CurrencyPositivePattern Mod 2 = 0)
      Dim groupSeparator As String = nfi.CurrencyGroupSeparator
      Dim decimalSeparator As String = nfi.CurrencyDecimalSeparator

      ' Form regular expression pattern.
      Dim pattern As String = Regex.Escape(CStr(IIf(symbolPrecedesIfPositive, currencySymbol, ""))) + _
                              "\s*[-+]?" + "([0-9]{0,3}(" + groupSeparator + "[0-9]{3})*(" + _
                              Regex.Escape(decimalSeparator) + "[0-9]+)?)" + _
                              CStr(IIf(Not symbolPrecedesIfPositive, currencySymbol, "")) 
      Console.WriteLine("The regular expression pattern is: ")
      Console.WriteLine("   " + pattern)      

      ' Get text that matches regular expression pattern.
      Dim matches As MatchCollection = Regex.Matches(input, pattern, RegexOptions.IgnorePatternWhitespace)               
      Console.WriteLine("Found {0} matches. ", matches.Count)

      ' Get numeric string, convert it to a value, and add it to List object.
      Dim expenses As New List(Of Decimal)
                     
      For Each match As Match In matches
         expenses.Add(Decimal.Parse(match.Groups.Item(1).Value))      
      Next

      ' Determine whether total is present and if present, whether it is correct.
      Dim total As Decimal
      For Each value As Decimal In expenses
         total += value
      Next
      
      If total / 2 = expenses(expenses.Count - 1) Then
         Console.WriteLine("The expenses total {0:C2}.", expenses(expenses.Count - 1))
      Else
         Console.WriteLine("The expenses total {0:C2}.", total)
      End If   
   End Sub
End Module
' The example displays the following output:
'       The regular expression pattern is:
'          \$\s*[-+]?([0-9]{0,3}(,[0-9]{3})*(\.[0-9]+)?)
'       Found 6 matches.
'       The expenses total $81.58.

Na komputerze, na których bieżącej kultury jest angielski — Stany Zjednoczone (en US) przykładzie dynamicznie tworzy wyrażenie regularne \$\s*[-+]?([0-9]{0,3}(,[0-9]{3})*(\.[0-9]+)?).On a computer whose current culture is English - United States (en-US), the example dynamically builds the regular expression \$\s*[-+]?([0-9]{0,3}(,[0-9]{3})*(\.[0-9]+)?). Ten wzorzec wyrażenia regularnego może zostać zinterpretowany w następujący sposób:This regular expression pattern can be interpreted as follows:

\$ Poszukaj pojedyncze wystąpienie symbol dolara ($) w ciągu wejściowym.Look for a single occurrence of the dollar symbol ($) in the input string. Ciąg wzorzec wyrażenia regularnego obejmuje odwrotny ukośnik, aby wskazać, że symbol dolara ($) jest interpretowane jako literału, a nie jako zakotwiczenia wyrażenia regularnego.The regular expression pattern string includes a backslash to indicate that the dollar symbol is to be interpreted literally rather than as a regular expression anchor. (Symbol $ wyłącznie wskazuje czy aparat wyrażeń regularnych powinno się rozpocząć jego dopasowuje koniec ciągu.) Aby upewnić się, że symbol waluty bieżącej kultury jest nieprawidłowo interpretowane jako wyrażenie regularne symbol przykład wywołuje Escape metody, aby anulować znak.(The $ symbol alone would indicate that the regular expression engine should try to begin its match at the end of a string.) To ensure that the current culture's currency symbol is not misinterpreted as a regular expression symbol, the example calls the Escape method to escape the character.
\s* Poszukaj zero lub więcej wystąpień biały znak.Look for zero or more occurrences of a white-space character.
[-+]? Poszukaj wystąpień zero lub jeden dodatnią znaku lub symbolu wartości ujemnej.Look for zero or one occurrence of either a positive sign or a negative sign.
([0-9]{0,3}(,[0-9]{3})*(\.[0-9]+)?) Zewnętrzne nawiasy, w tym wyrażeniu zdefiniować jako grupę przechwytywania lub Podwyrażenie.The outer parentheses around this expression define it as a capturing group or a subexpression. Jeśli zostanie znaleziony dopasowanie, można pobrać informacji o tej części dopasowania ciągu w od drugiego Group obiektu w GroupCollection obiektu zwróconego przez Match.Groups właściwości.If a match is found, information about this part of the matching string can be retrieved from the second Group object in the GroupCollection object returned by the Match.Groups property. (Cały dopasowania reprezentuje pierwszy element w kolekcji.)(The first element in the collection represents the entire match.)
[0-9]{0,3} Poszukaj zero do trzech wystąpień od 0 do 9 cyfr dziesiętnych.Look for zero to three occurrences of the decimal digits 0 through 9.
(,[0-9]{3})* Poszukaj zero lub więcej wystąpień separatora grupy następuje trzech cyfr dziesiętnych.Look for zero or more occurrences of a group separator followed by three decimal digits.
\. Poszukaj pojedyncze wystąpienie separatorem dziesiętnym.Look for a single occurrence of the decimal separator.
[0-9]+ Wyszukaj jeden lub więcej cyfr dziesiętnych.Look for one or more decimal digits.
(\.[0-9]+)? Poszukaj wystąpień zero lub jeden separatora dziesiętnego następuje co najmniej jedną cyfrę.Look for zero or one occurrence of the decimal separator followed by at least one decimal digit.

W przypadku każdego z tych subpatterns znalezione w ciągu wejściowym dopasowania zakończy się pomyślnie, a Match obiekt, który zawiera informacje o zgodności jest dodawany do MatchCollection obiektu.If each of these subpatterns is found in the input string, the match succeeds, and a Match object that contains information about the match is added to the MatchCollection object.

TytułTitle OpisDescription
Język wyrażeń regularnych — podręczny wykazRegular Expression Language - Quick Reference Zawiera informacje dotyczące zestawu znaków, Operatorzy i konstrukcji, których można użyć do zdefiniowania wyrażeń regularnych.Provides information on the set of characters, operators, and constructs that you can use to define regular expressions.
Model obiektów wyrażeń regularnychThe Regular Expression Object Model Zawiera informacje i przykłady kodu, które przedstawiają sposób użycia klasy wyrażeń regularnych.Provides information and code examples that illustrate how to use the regular expression classes.
Szczegóły dotyczące zachowania wyrażeń regularnychDetails of Regular Expression Behavior Zawiera informacje dotyczące możliwości i zachowania wyrażeń regularnych programu .NET.Provides information about the capabilities and behavior of .NET regular expressions.
Przykłady wyrażeń regularnychRegular Expression Examples Zawiera przykłady kodu, które ilustrują typowe używa wyrażeń regularnych.Provides code examples that illustrate typical uses of regular expressions.

Tematy pomocyReference

System.Text.RegularExpressions
System.Text.RegularExpressions.Regex
Wyrażeń regularnych — podręczny wykaz (do pobrania w formacie programu Word)Regular Expressions - Quick Reference (download in Word format)
Wyrażeń regularnych — podręczny wykaz (do pobrania w formacie PDF)Regular Expressions - Quick Reference (download in PDF format)