Regex.Split Метод

Определение

Разделяет входную строку в массив подстрок в позициях, определенных соответствием регулярного выражения.

Перегрузки

Split(String)

Разделяет входную строку в массив подстрок в позициях, определенных шаблоном регулярного выражения, указанным в конструкторе Regex.

Split(String, Int32)

Разделяет входную строку указанное максимальное количество раз в массив подстрок в позициях, определенных регулярным выражением, указанным в конструкторе Regex.

Split(String, String)

Разделяет входную строку в массив подстрок в позициях, определенных шаблоном регулярного выражения.

Split(String, Int32, Int32)

Разделяет входную строку указанное максимальное количество раз в массив подстрок в позициях, определенных регулярным выражением, указанным в конструкторе Regex. Поиск шаблона регулярного выражения начинается с указанной позиции элемента во входной строке.

Split(String, String, RegexOptions)

Разделяет входную строку в массив подстрок в позициях, определенных указанным шаблоном регулярного выражения. Указанные параметры изменяют операцию сопоставления.

Split(String, String, RegexOptions, TimeSpan)

Разделяет входную строку в массив подстрок в позициях, определенных указанным шаблоном регулярного выражения. Дополнительные параметры определяют параметры, которые изменяют соответствующую операцию и интервал времени ожидания, если совпадение не найдено.

Split(String)

Разделяет входную строку в массив подстрок в позициях, определенных шаблоном регулярного выражения, указанным в конструкторе Regex.

public:
 cli::array <System::String ^> ^ Split(System::String ^ input);
public string[] Split (string input);
member this.Split : string -> string[]
Public Function Split (input As String) As String()

Параметры

input
String

Строка для разделения.

Возвращаемое значение

String[]

Массив строк.

Исключения

input имеет значение null.

Время ожидания истекло. Дополнительные сведения о времени ожидания см. в разделе "Примечания".

Комментарии

Методы Regex.Split аналогичны методу String.Split(Char[]) , за исключением того, что Regex.Split разбивает строку на разделитель, определяемый регулярным выражением, а не набором символов. Строка разбивается как можно больше раз. Если разделитель не найден, возвращаемое значение содержит один элемент, значение которого является исходной входной строкой.

Если несколько совпадений находятся рядом друг с другом, в массив вставляется пустая строка. Например, разделение строки на одном дефисе приводит к тому, что возвращаемый массив будет включать пустую строку в позиции, где находятся два смежных дефиса, как показано в следующем коде.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      Regex regex = new Regex("-");         // Split on hyphens.
      string[] substrings = regex.Split("plum--pear");
      foreach (string match in substrings)
      {
         Console.WriteLine("'{0}'", match);
      }
   }
}
// The example displays the following output:
//    'plum'
//    ''
//    'pear'
Imports System.Text.RegularExpressions

Module RegexSplit
   Public Sub Main()
      Dim regex As Regex = New Regex("-")         ' Split on hyphens.
      Dim substrings() As String = regex.Split("plum--pear")
      For Each match As String In substrings
         Console.WriteLine("'{0}'", match)
      Next
   End Sub
End Module
' The example displays the following output:
'    'plum'
'    ''
'    'pear'

Если совпадение найдено в начале или конце входной строки, пустая строка включается в начало или конец возвращаемого массива. В следующем примере используется шаблон \d+ регулярного выражения для разделения входной строки на числовые символы. Так как строка начинается и заканчивается соответствующими числовыми символами, значение первого и последнего элементов возвращаемого массива равно String.Empty.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\d+";
      Regex rgx = new Regex(pattern);
      string input = "123ABCDE456FGHIJKL789MNOPQ012";
      
      string[] result = rgx.Split(input);
      for (int ctr = 0; ctr < result.Length; ctr++) {
         Console.Write("'{0}'", result[ctr]);
         if (ctr < result.Length - 1) 
            Console.Write(", ");
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//       '', 'ABCDE', 'FGHIJKL', 'MNOPQ', ''
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\d+"
      Dim rgx As New Regex(pattern)
      Dim input As String = "123ABCDE456FGHIJKL789MNOPQ012"
      
      Dim result() As String = rgx.Split(input)
      For ctr As Integer = 0 To result.Length - 1
         Console.Write("'{0}'", result(ctr))
         If ctr < result.Length - 1 Then Console.Write(", ")
      Next
      Console.WriteLine()
   End Sub               
End Module
' The example displays the following output:
'       '', 'ABCDE', 'FGHIJKL', 'MNOPQ', ''

Если в выражении используются круглые скобки, любой Regex.Split захваченный текст включается в результирующий массив строк. Например, если разделить строку "plum-pear" на дефис, помещенный в захватываемые круглые скобки, возвращаемый массив содержит строковый элемент, содержащий дефис.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      Regex regex = new Regex("(-)");         // Split on hyphens.
      string[] substrings = regex.Split("plum-pear");
      foreach (string match in substrings)
      {
         Console.WriteLine("'{0}'", match);
      }
   }
}
// The example displays the following output:
//    'plum'
//    '-'
//    'pear'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim regex As Regex = New Regex("(-)")          ' Split on hyphens.
      Dim substrings() As String = regex.Split("plum-pear")
      For Each match As String In substrings
         Console.WriteLine("'{0}'", match)
      Next
   End Sub
End Module
' The example displays the following output:
'    'plum'
'    '-'
'    'pear'

Однако если шаблон регулярного выражения включает несколько наборов записных скобок, поведение этого метода зависит от версии платформа .NET Framework. В платформа .NET Framework 1.0 и 1.1, если совпадение не найдено в первом наборе круглых скобок, захваченный текст из дополнительных записных скобок не включается в возвращаемый массив. Начиная с платформа .NET Framework 2.0 весь захваченный текст также добавляется в возвращаемый массив. Например, следующий код использует два набора записных скобок для извлечения элементов даты, включая разделители даты, из строки даты. Первый набор скобок захватывает дефис, а второй — косую черту. Если пример кода компилируется и выполняется в платформа .NET Framework 1.0 или 1.1, он исключает символы косой черты; если он компилируется и выполняется в платформа .NET Framework 2.0 или более поздних версий, он включает их.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = @"07/14/2007";   
      string pattern = @"(-)|(/)";
      Regex regex = new Regex(pattern);
      foreach (string result in regex.Split(input)) 
      {
         Console.WriteLine("'{0}'", result);
      }
   }
}
// Under .NET 1.0 and 1.1, the method returns an array of
// 3 elements, as follows:
//    '07'
//    '14'
//    '2007'
//
// Under .NET 2.0 and later, the method returns an array of
// 5 elements, as follows:
//    '07'
//    '/'
//    '14'
//    '/'
//    '2007'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "07/14/2007"   
      Dim pattern As String = "(-)|(/)"
      Dim regex As Regex = New Regex(pattern)
      For Each result As String In regex.Split(input) 
         Console.WriteLine("'{0}'", result)
      Next
   End Sub
End Module
' In .NET 1.0 and 1.1, the method returns an array of
' 3 elements, as follows:
'    '07'
'    '14'
'    '2007'
'
' In .NET 2.0 and later, the method returns an array of
' 5 elements, as follows:
'    '07'
'    '/'
'    '14'
'    '/'
'    '2007'

Если регулярное выражение может соответствовать пустой строке, разделит строку на массив односимвных строк, Split(String) так как пустой разделитель строк можно найти в каждом расположении. Пример:

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "characters";
      Regex regex = new Regex("");
      string[] substrings = regex.Split(input);
      Console.Write("{");
      for(int ctr = 0; ctr < substrings.Length; ctr++)
      {
         Console.Write(substrings[ctr]);
         if (ctr < substrings.Length - 1)
            Console.Write(", ");
      }
      Console.WriteLine("}");
   }
}
// The example displays the following output:   
//    {, c, h, a, r, a, c, t, e, r, s, }
Imports System.Text.RegularExpressions

Module Main
   Public Sub Main()
      Dim input As String = "characters"
      Dim regex As New Regex("")
      Dim substrings() As String = regex.Split(input)
      Console.Write("{")
      For ctr As Integer = 0 to substrings.Length - 1
         Console.Write(substrings(ctr))
         If ctr < substrings.Length - 1 Then Console.Write(", ")
      Next
      Console.WriteLine("}")
   End Sub
End Module
' The example produces the following output:   
'    {, c, h, a, r, a, c, t, e, r, s, }

Обратите внимание, что возвращаемый массив также содержит пустую строку в начале и конце массива.

Исключение RegexMatchTimeoutException возникает, если время выполнения операции разбиения превышает интервал времени ожидания, заданный конструктором Regex.Regex(String, RegexOptions, TimeSpan) . Если интервал времени ожидания не задан при вызове конструктора, возникает исключение, если операция превышает любое значение времени ожидания, установленное для домена приложения, в котором Regex создается объект. Если время ожидания не определено в Regex вызове конструктора или в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создается.

См. также раздел

Применяется к

Split(String, Int32)

Разделяет входную строку указанное максимальное количество раз в массив подстрок в позициях, определенных регулярным выражением, указанным в конструкторе Regex.

public:
 cli::array <System::String ^> ^ Split(System::String ^ input, int count);
public string[] Split (string input, int count);
member this.Split : string * int -> string[]
Public Function Split (input As String, count As Integer) As String()

Параметры

input
String

Строка для разделения.

count
Int32

Максимальное количество возможных случаев разделения.

Возвращаемое значение

String[]

Массив строк.

Исключения

input имеет значение null.

Время ожидания истекло. Дополнительные сведения о времени ожидания см. в разделе "Примечания".

Комментарии

Методы Regex.Split аналогичны методу String.Split , за исключением того, что Regex.Split разбивает строку на разделитель, определяемый регулярным выражением, а не набором символов. Параметр count указывает максимальное количество подстрок, на которое input можно разделить строку; последняя строка содержит нераспределенное оставшееся количество строк. Нулевое count значение обеспечивает поведение по умолчанию для разделения как можно больше раз.

Если несколько совпадений находятся рядом друг с другом или если совпадение найдено в начале или конце input, а количество найденных совпадений по крайней мере на два меньше, чем count, в массив вставляется пустая строка. То есть пустые строки, которые являются результатом смежных соответствий или совпадений в начале или конце входной строки, учитываются при определении того, равно countли количество сопоставленных подстрок . В следующем примере регулярное выражение /d+ используется для разделения входной строки, которая включает одну или несколько десятичных цифр, на не более трех подстрок. Поскольку начало входной строки соответствует шаблону регулярного выражения, первый элемент массива String.Emptyсодержит , второй содержит первый набор алфавитных символов во входной строке, а третий — оставшуюся часть строки, которая следует за третьим совпадением.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\d+";
      Regex rgx = new Regex(pattern);
      string input = "123ABCDE456FGHIJKL789MNOPQ012";
      
      string[] result = rgx.Split(input, 3);
      for (int ctr = 0; ctr < result.Length; ctr++) {
         Console.Write("'{0}'", result[ctr]);
         if (ctr < result.Length - 1) 
            Console.Write(", ");
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//       '', 'ABCDE', 'FGHIJKL789MNOPQ012'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\d+"
      Dim rgx As New Regex(pattern)
      Dim input As String = "123ABCDE456FGHIJKL789MNOPQ012"
      
      Dim result() As String = rgx.Split(input, 3)
      For ctr As Integer = 0 To result.Length - 1
         Console.Write("'{0}'", result(ctr))
         If ctr < result.Length - 1 Then Console.Write(", ")
      Next
      Console.WriteLine()
   End Sub               
End Module
' The example displays the following output:
'       '', 'ABCDE', 'FGHIJKL789MNOPQ012'

Если в регулярном выражении используются круглые скобки, любой захваченный текст включается в массив разделенных строк. Однако любые элементы массива, содержащие захваченный текст, не учитываются при определении того, достигло countли количество совпадений . Например, при разделении строки "apple-apricot-plum-pear-banana" на не более четырех подстрок приводится массив из семи элементов, как показано в следующем коде.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = "(-)";
      string input = "apple-apricot-plum-pear-banana";
      Regex regex = new Regex(pattern);         // Split on hyphens.
      string[] substrings = regex.Split(input, 4);
      foreach (string match in substrings)
      {
         Console.WriteLine("'{0}'", match);
      }
   }
}
// The example displays the following output:
//       'apple'
//       '-'
//       'apricot'
//       '-'
//       'plum'
//       '-'
//       'pear-banana'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "(-)"
      Dim input As String = "apple-apricot-plum-pear-banana"
      Dim regex As Regex = New Regex(pattern)         ' Split on hyphens.
      Dim substrings() As String = regex.Split(input, 4)
      For Each match As String In substrings
         Console.WriteLine("'{0}'", match)
      Next
   End Sub
End Module
' The example displays the following output:
'    'apple'
'    '-'
'    'apricot'
'    '-'
'    'plum'
'    '-'
'    'pear-banana'

Однако если шаблон регулярного выражения включает несколько наборов записных скобок, поведение этого метода зависит от версии платформа .NET Framework. В платформа .NET Framework 1.0 и 1.1 в возвращаемый массив включается только захваченный текст из первого набора записных скобок. Начиная с платформа .NET Framework 2.0 весь захваченный текст добавляется в возвращаемый массив. Однако элементы в возвращаемом массиве, содержащие захваченный текст, не учитываются при определении того, равно countли количество совпадающих подстрок . Например, в следующем коде регулярное выражение использует два набора записных скобок для извлечения элементов даты из строки даты. Первый набор скобок захватывает дефис, а второй — косую черту. Затем вызов Split(String, Int32) метода задает не более двух элементов в возвращаемом массиве. Если пример кода компилируется и выполняется в платформа .NET Framework 1.0 или 1.1, метод возвращает двухэлейный строковый массив. Если он компилируется и выполняется в платформа .NET Framework 2.0 или более поздних версий, метод возвращает массив строк из трех элементов.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = @"07/14/2007";   
      string pattern = @"(-)|(/)";
      Regex regex = new Regex(pattern);
      foreach (string result in regex.Split(input, 2)) 
      {
         Console.WriteLine("'{0}'", result);
      }
   }
}
// Under .NET 1.0 and 1.1, the method returns an array of
// 2 elements, as follows:
//    '07'
//    '14/2007'
//
// Under .NET 2.0 and later, the method returns an array of
// 3 elements, as follows:
//    '07'
//    '/'
//    '14/2007'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "07/14/2007"   
      Dim pattern As String = "(-)|(/)"
      Dim regex As Regex = New Regex(pattern)
      For Each result As String In regex.Split(input, 2) 
         Console.WriteLine("'{0}'", result)
      Next
   End Sub
End Module
' In .NET 1.0 and 1.1, the method returns an array of
' 2 elements, as follows:
'    '07'
'    '14/2007'
'
' In .NET 2.0 and later, the method returns an array of
' 3 elements, as follows:
'    '07'
'    '/'
'    '14/2007'

Если регулярное выражение может соответствовать пустой строке, разделит строку на массив односимвных строк, Split(String, Int32) так как пустой разделитель строк можно найти в каждом расположении. В следующем примере строковые "символы" разбиваются на столько элементов, сколько во входной строке. Так как строка NULL соответствует началу входной строки, в начало возвращаемого массива вставляется пустая строка. В результате десятый элемент будет состоять из двух символов в конце входной строки.

Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "characters"
      Dim regex As New Regex("")
      Dim substrings() As String = regex.Split(input, input.Length)
      Console.Write("{")
      For ctr As Integer = 0 to substrings.Length - 1
         Console.Write(substrings(ctr))
         if ctr < substrings.Length - 1 Then Console.Write(", ")
      Next
      Console.WriteLine("}")
   End Sub
End Module
' The example displays the following output:   
'    {, c, h, a, r, a, c, t, e, rs}

Исключение RegexMatchTimeoutException возникает, если время выполнения операции разбиения превышает интервал времени ожидания, заданный конструктором Regex.Regex(String, RegexOptions, TimeSpan) . Если интервал времени ожидания не задан при вызове конструктора, возникает исключение, если операция превышает любое значение времени ожидания, установленное для домена приложения, в котором Regex создается объект. Если время ожидания не определено в Regex вызове конструктора или в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создается.

См. также раздел

Применяется к

Split(String, String)

Разделяет входную строку в массив подстрок в позициях, определенных шаблоном регулярного выражения.

public:
 static cli::array <System::String ^> ^ Split(System::String ^ input, System::String ^ pattern);
public static string[] Split (string input, string pattern);
static member Split : string * string -> string[]
Public Shared Function Split (input As String, pattern As String) As String()

Параметры

input
String

Строка для разделения.

pattern
String

Шаблон регулярного выражения для сопоставления.

Возвращаемое значение

String[]

Массив строк.

Исключения

Произошла ошибка анализа регулярного выражения.

Параметр input или pattern имеет значение null.

Время ожидания истекло. Дополнительные сведения о времени ожидания см. в разделе "Примечания".

Комментарии

Методы Regex.Split аналогичны методу String.Split , за исключением того, что Regex.Split разбивает строку на разделитель, определяемый регулярным выражением, а не набором символов. Строка input разбивается как можно больше раз. Если pattern значение не найдено в строке input , возвращаемое значение содержит один элемент, значение которого является исходной input строкой.

Параметр pattern состоит из элементов языка регулярных выражений, которые символично описывают соответствующую строку. Дополнительные сведения о регулярных выражениях см. в разделе Регулярные выражения .NET и Язык регулярных выражений — краткий справочник.

Важно!

Скомпилированные регулярные выражения, используемые в вызовах статических Split методов, кэшируются автоматически. Чтобы самостоятельно управлять временем существования скомпилированных регулярных выражений, используйте методы экземпляра Split .

Если несколько совпадений находятся рядом друг с другом, в массив вставляется пустая строка. Например, разделение строки на одном дефисе приводит к тому, что возвращаемый массив будет включать пустую строку в позиции, где находятся два смежных дефиса, как показано в следующем коде.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "plum--pear";
      string pattern = "-";            // Split on hyphens
      
      string[] substrings = Regex.Split(input, pattern);
      foreach (string match in substrings)
      {
         Console.WriteLine("'{0}'", match);
      }
   }
}
// The method displays the following output:
//    'plum'
//    ''
//    'pear'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "plum--pear"
      Dim pattern As String = "-"          ' Split on hyphens
      
      Dim substrings() As String = Regex.Split(input, pattern)
      For Each match As String In substrings
         Console.WriteLine("'{0}'", match)
      Next
   End Sub  
End Module
' The example displays the following output:
'    'plum'
'    ''
'    'pear'

Если совпадение найдено в начале или конце входной строки, пустая строка включается в начало или конец возвращаемого массива. В следующем примере используется шаблон \d+ регулярного выражения для разделения входной строки на числовые символы. Так как строка начинается и заканчивается соответствующими числовыми символами, значение первого и последнего элементов возвращаемого массива равно String.Empty.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\d+";
      string input = "123ABCDE456FGHIJKL789MNOPQ012";
      string[] result = Regex.Split(input, pattern);
      for (int ctr = 0; ctr < result.Length; ctr++) {
         Console.Write("'{0}'", result[ctr]);
         if (ctr < result.Length - 1) 
            Console.Write(", ");
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//       '', 'ABCDE', 'FGHIJKL', 'MNOPQ', ''
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\d+"
      Dim input As String = "123ABCDE456FGHIJKL789MNOPQ012"
      Dim result() As String = Regex.Split(input, pattern)
      For ctr As Integer = 0 To result.Length - 1
         Console.Write("'{0}'", result(ctr))
         If ctr < result.Length - 1 Then Console.Write(", ")
      Next
      Console.WriteLine()
   End Sub               
End Module
' The example displays the following output:
'       '', 'ABCDE', 'FGHIJKL', 'MNOPQ', ''

Если в выражении используются круглые скобки, любой Regex.Split захваченный текст включается в результирующий массив строк. Например, если разделить строку "сливы-груша" на дефис, помещенный в круглые скобки, возвращаемый массив будет содержать строковый элемент, содержащий дефис.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "plum-pear";
      string pattern = "(-)";

      string[] substrings = Regex.Split(input, pattern);    // Split on hyphens
      foreach (string match in substrings)
      {
         Console.WriteLine("'{0}'", match);
      }
   }
}
// The example displays the following output:
//    'plum'
//    '-'
//    'pear'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "plum-pear"
      Dim pattern As String = "(-)" 
      
      Dim substrings() As String = Regex.Split(input, pattern)    ' Split on hyphens.
      For Each match As String In substrings
         Console.WriteLine("'{0}'", match)
      Next
   End Sub
End Module
' The method writes the following to the console:
'    'plum'
'    '-'
'    'pear'

Однако если шаблон регулярного выражения содержит несколько наборов записных скобок, поведение этого метода зависит от версии платформа .NET Framework. В платформа .NET Framework 1.0 и 1.1, если совпадение не найдено в первом наборе записных скобок, захваченный текст из дополнительных записных скобок не включается в возвращаемый массив. Начиная с платформа .NET Framework 2.0 весь захваченный текст также добавляется в возвращаемый массив. Например, следующий код использует два набора записных скобок для извлечения элементов даты, включая разделители дат, из строки даты. Первый набор скобок фиксирует дефис, а второй — косую черту. Если пример кода компилируется и выполняется в платформа .NET Framework 1.0 или 1.1, он исключает символы косой черты; если он компилируется и выполняется в платформа .NET Framework 2.0 или более поздних версий, он включает их.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = @"07/14/2007";   
      string pattern = @"(-)|(/)";

      foreach (string result in Regex.Split(input, pattern)) 
      {
         Console.WriteLine("'{0}'", result);
      }
   }
}
// In .NET 1.0 and 1.1, the method returns an array of
// 3 elements, as follows:
//    '07'
//    '14'
//    '2007'
//
// In .NET 2.0 and later, the method returns an array of
// 5 elements, as follows:
//    '07'
//    '/'
//    '14'
//    '/'
//    '2007'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "07/14/2007"   
      Dim pattern As String = "(-)|(/)"
      For Each result As String In Regex.Split(input, pattern) 
         Console.WriteLine("'{0}'", result)
      Next
   End Sub
End Module
' In .NET 1.0 and 1.1, the method returns an array of
' 3 elements, as follows:
'    '07'
'    '14'
'    '2007'
'
' In .NET 2.0 and later, the method returns an array of
' 5 elements, as follows:
'    '07'
'    '/'
'    '14'
'    '/'
'    '2007'

Если регулярное выражение может соответствовать пустой строке, разделит строку на массив строк из одного символа, Split так как пустой разделитель строк можно найти в каждом месте. Пример:

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "characters";
      string[] substrings = Regex.Split(input, "");
      Console.Write("{");
      for(int ctr = 0; ctr < substrings.Length; ctr++)
      {
         Console.Write("'{0}'", substrings[ctr]);
         if (ctr < substrings.Length - 1)
            Console.Write(", ");
      }
      Console.WriteLine("}");
   }
}
// The example produces the following output:   
//    {'', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', 's', ''}
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "characters"
      Dim substrings() As String = Regex.Split(input, "")
      Console.Write("{")
      For ctr As Integer = 0 to substrings.Length - 1
         Console.Write("'{0}'", substrings(ctr))
         If ctr < substrings.Length - 1 Then Console.Write(", ")
      Next
      Console.WriteLine("}")
   End Sub
End Module
' The example produces the following output:   
'    {'', 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', 's', ''}

Обратите внимание, что возвращаемый массив также содержит пустую строку в начале и конце массива.

Исключение RegexMatchTimeoutException возникает, если время выполнения операции разделения превышает интервал времени ожидания, указанный для домена приложения, в котором вызывается метод. Если время ожидания не определено в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создается.

Примечания для тех, кто вызывает этот метод

Время ожидания этого метода истекает после интервала, равного значению времени ожидания по умолчанию для домена приложения, в котором вызывается метод. Если значение времени ожидания не определено для домена приложения, используется значение InfiniteMatchTimeout, которое предотвращает истечение времени ожидания метода. Рекомендуемый статический метод разделения текста на совпадение шаблона — Split(String, String, RegexOptions, TimeSpan), который позволяет задать интервал времени ожидания.

См. также раздел

Применяется к

Split(String, Int32, Int32)

Разделяет входную строку указанное максимальное количество раз в массив подстрок в позициях, определенных регулярным выражением, указанным в конструкторе Regex. Поиск шаблона регулярного выражения начинается с указанной позиции элемента во входной строке.

public:
 cli::array <System::String ^> ^ Split(System::String ^ input, int count, int startat);
public string[] Split (string input, int count, int startat);
member this.Split : string * int * int -> string[]
Public Function Split (input As String, count As Integer, startat As Integer) As String()

Параметры

input
String

Строка для разделения.

count
Int32

Максимальное количество возможных случаев разделения.

startat
Int32

Позиция символа во входной строке, с которой начинается поиск.

Возвращаемое значение

String[]

Массив строк.

Исключения

input имеет значение null.

Параметр startat имеет значение меньше нуля или больше длины input.

Время ожидания истекло. Дополнительные сведения о времени ожидания см. в разделе "Примечания".

Комментарии

Методы Regex.Split аналогичны методу String.Split , за исключением того, что Regex.Split разбивает строку на разделитель, определяемый регулярным выражением, а не набором символов. Параметр count задает максимальное количество подстрок, на которые input разбивается строка; последняя строка содержит нераспреложенный остаток строки. Нулевое count значение обеспечивает поведение по умолчанию для разделения как можно больше раз. Параметр startat определяет точку, с которой начинается поиск первого разделителя (это можно использовать для пропуска начальных пробелов).

Дополнительные сведения о startatсм. в разделе "Примечания" статьи Match(String, Int32).

Если совпадений countиз позиции +1 в строке не найдено, метод возвращает массив из одного элемента, содержащий input строку. При обнаружении одного или нескольких совпадений первый элемент возвращаемого массива содержит первую часть строки от первого символа до одного символа перед совпадением.

Если несколько совпадений находятся рядом друг с другом и количество найденных совпадений по крайней мере на два меньше, чем count, в массив вставляется пустая строка. Аналогичным образом, если совпадение найдено в startat, который является первым символом в строке, первый элемент возвращаемого массива будет пустой строкой. То есть пустые строки, которые являются результатом смежных совпадений, учитываются при определении того, равно countли количество соответствующих подстрок . В следующем примере регулярное выражение \d+ используется для поиска начальной позиции первой подстроки числовых символов в строке, а затем для разделения строки не более трех раз, начиная с этой позиции. Так как шаблон регулярного выражения соответствует началу входной строки, возвращаемый массив строк состоит из пустой строки, буквенной строки из пяти символов и оставшейся части строки.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\d+";
      Regex rgx = new Regex(pattern);
      string input = "123ABCDE456FGHIJ789KLMNO012PQRST";
      Match m = rgx.Match(input);
      if (m.Success) { 
         int startAt = m.Index;
         string[] result = rgx.Split(input, 3, startAt);
         for (int ctr = 0; ctr < result.Length; ctr++) {
            Console.Write("'{0}'", result[ctr]);
            if (ctr < result.Length - 1)
               Console.Write(", ");
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       '', 'ABCDE', 'FGHIJKL789MNOPQ012'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "\d+"
      Dim rgx As New Regex(pattern)
      Dim input As String = "123ABCDE456FGHIJ789KLMNO012PQRST"
      Dim m As Match = rgx.Match(input)
      If m.Success Then 
         Dim startAt As Integer = m.Index
         Dim result() As String = rgx.Split(input, 3, startAt)
         For ctr As Integer = 0 To result.Length - 1
            Console.Write("'{0}'", result(ctr))
            If ctr < result.Length - 1 Then Console.Write(", ")
         Next
         Console.WriteLine()
      End If
   End Sub               
End Module
' The example displays the following output:
'       '', 'ABCDE', 'FGHIJKL789MNOPQ012'

Если запись круглых скобок используется в регулярном выражении, любой захваченный текст включается в массив разделенных строк. Однако все элементы массива, содержащие захваченный текст, не учитываются при определении того, достигло countли количество совпадений . Например, разделение строки "яблоко-абрикос-сливы-груша-гранат-ананас-персик" на не более четырех подстрок, начиная с символа 15 в строке, приводит к массиву из семи элементов, как показано в следующем коде.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = "(-)";
      string input = "apple-apricot-plum-pear-pomegranate-pineapple-peach";

      // Split on hyphens from 15th character on
      Regex regex = new Regex(pattern);    
      // Split on hyphens from 15th character on
      string[] substrings = regex.Split(input, 4, 15);
      foreach (string match in substrings)
      {
         Console.WriteLine("'{0}'", match);
      }
   }
}
// The method writes the following to the console:
//    'apple-apricot-plum'
//    '-'
//    'pear'
//    '-'
//    'pomegranate'
//    '-'
//    'pineapple-peach'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "(-)"
      Dim input As String = "apple-apricot-plum-pear-pomegranate-pineapple-peach"

      Dim regex As Regex = New Regex(pattern)    
      ' Split on hyphens from 15th character on
      Dim substrings() As String = regex.Split(input, 4, 15)
      For Each match As String In substrings
         Console.WriteLine("'{0}'", match)
      Next
   End Sub  
End Module
' The example displays the following output:
'    'apple-apricot-plum'
'    '-'
'    'pear'
'    '-'
'    'pomegranate'
'    '-'
'    'pineapple-peach'

Однако если шаблон регулярного выражения содержит несколько наборов записных скобок, поведение этого метода зависит от версии платформа .NET Framework. В платформа .NET Framework 1.0 и 1.1, если совпадение не найдено в первом наборе скобок, захваченный текст из дополнительных записных скобок не включается в возвращаемый массив. Начиная с платформа .NET Framework 2.0 весь захваченный текст также добавляется в возвращаемый массив. Например, следующий код использует два набора записных скобок для извлечения отдельных слов в строке. Первый набор скобок фиксирует дефис, а второй — вертикальную полосу. Если пример кода компилируется и выполняется в платформа .NET Framework 1.0 или 1.1, он исключает символы вертикальной полосы; если он компилируется и выполняется в платформа .NET Framework 2.0 или более поздних версий, он включает их.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = "(-)|([|])";     // possible delimiters found in string
      string input = "apple|apricot|plum|pear|pomegranate|pineapple|peach";

      Regex regex = new Regex(pattern);    
      // Split on delimiters from 15th character on
      string[] substrings = regex.Split(input, 4, 15);
      foreach (string match in substrings)
      {
         Console.WriteLine("'{0}'", match);
      }
   }
}
// In .NET 2.0 and later, the method returns an array of
// 7 elements, as follows:
//    apple|apricot|plum'
//    '|'
//    'pear'
//    '|'
//    'pomegranate'
//    '|'
//    'pineapple|peach'
// In .NET 1.0 and 1.1, the method returns an array of
// 4 elements, as follows:
//    'apple|apricot|plum'
//    'pear'
//    'pomegranate'
//    'pineapple|peach'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "(-)|([|])"   ' possible delimiters found in string
      Dim input As String = "apple|apricot|plum|pear|pomegranate|pineapple|peach"

      Dim regex As Regex = New Regex(pattern)    
      ' Split on delimiters from 15th character on
      Dim substrings() As String = regex.Split(input, 4, 15)
      For Each match As String In substrings
         Console.WriteLine("'{0}'", match)
      Next
   End Sub
End Module
' In .NET 2.0, the method returns an array of
' 7 elements, as follows:
'    apple|apricot|plum'
'    '|'
'    'pear'
'    '|'
'    'pomegranate'
'    '|'
'    'pineapple|peach'
' In .NET 1.0 and 1.1, the method returns an array of
' 4 elements, as follows:
'    'apple|apricot|plum'
'    'pear'
'    'pomegranate'
'    'pineapple|peach'

Если регулярное выражение может соответствовать пустой строке, разделит строку на массив строк из одного символа, Split так как пустой разделитель строк можно найти в каждом месте. В следующем примере строка "символы" разбивается на столько элементов, сколько содержит входная строка, начиная с символа "a". Так как строка NULL соответствует концу входной строки, в конец возвращаемого массива вставляется строка NULL.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "characters";
      Regex regex = new Regex("");
      string[] substrings = regex.Split(input, input.Length, input.IndexOf("a"));
      Console.Write("{");
      for(int ctr = 0; ctr < substrings.Length; ctr++)
      {
         Console.Write(substrings[ctr]);
         if (ctr < substrings.Length - 1)
            Console.Write(", ");
      }
      Console.WriteLine("}");
   }
}
// The example displays the following output:   
//    {, c, h, a, r, a, c, t, e, rs}
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "characters"
      Dim regex As New Regex("")
      Dim substrings() As String = regex.Split(input, input.Length, _
                                               input.IndexOf("a"))
      Console.Write("{")
      For ctr As Integer = 0 to substrings.Length - 1
         Console.Write(substrings(ctr))
         If ctr < substrings.Length - 1 Then Console.Write(", ")
      Next
      Console.WriteLine("}")
   End Sub
End Module
' The example produces the following output:   
'    {, c, h, a, r, a, c, t, e, rs}

Исключение RegexMatchTimeoutException возникает, если время выполнения операции разделения превышает интервал времени ожидания, заданный конструктором Regex.Regex(String, RegexOptions, TimeSpan) . Если при вызове конструктора не задан интервал времени ожидания, создается исключение, если операция превышает любое значение времени ожидания, установленное для домена приложения, в котором Regex создается объект. Если время ожидания не определено в Regex вызове конструктора или в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создается.

См. также раздел

Применяется к

Split(String, String, RegexOptions)

Разделяет входную строку в массив подстрок в позициях, определенных указанным шаблоном регулярного выражения. Указанные параметры изменяют операцию сопоставления.

public:
 static cli::array <System::String ^> ^ Split(System::String ^ input, System::String ^ pattern, System::Text::RegularExpressions::RegexOptions options);
public static string[] Split (string input, string pattern, System.Text.RegularExpressions.RegexOptions options);
static member Split : string * string * System.Text.RegularExpressions.RegexOptions -> string[]
Public Shared Function Split (input As String, pattern As String, options As RegexOptions) As String()

Параметры

input
String

Строка для разделения.

pattern
String

Шаблон регулярного выражения для сопоставления.

options
RegexOptions

Побитовая комбинация значений перечисления, предоставляющая параметры для сопоставления.

Возвращаемое значение

String[]

Массив строк.

Исключения

Произошла ошибка анализа регулярного выражения.

Параметр input или pattern имеет значение null.

Параметр options не является допустимой битовой комбинацией значений RegexOptions.

Время ожидания истекло. Дополнительные сведения о времени ожидания см. в разделе "Примечания".

Комментарии

Методы Regex.Split аналогичны методу String.Split(Char[]) , за исключением того, что Regex.Split разбивает строку на разделитель, определяемый регулярным выражением, а не набором символов. Строка разбивается как можно больше раз. Если разделитель не найден, возвращаемое значение содержит один элемент, значение которого является исходной input строкой.

Параметр pattern состоит из элементов языка регулярных выражений, которые символично описывают соответствующую строку. Дополнительные сведения о регулярных выражениях см . в разделах Регулярные выражения .NET и Язык регулярных выражений — краткий справочник.

Важно!

Скомпилированные регулярные выражения, используемые в вызовах статических Split методов, кэшируются автоматически. Чтобы самостоятельно управлять временем существования скомпилированных регулярных выражений, используйте методы экземпляра Split .

Если несколько совпадений находятся рядом друг с другом, в массив вставляется пустая строка. Например, разделение строки на одном дефисе приводит к тому, что возвращаемый массив будет включать пустую строку в позиции, где находятся два смежных дефиса.

Если совпадение найдено в начале или конце входной строки, пустая строка включается в начало или конец возвращаемого массива. В следующем примере используется шаблон [a-z]+ регулярного выражения для разделения входной строки на любой буквенный или нижний буквенный символ. Так как строка начинается и заканчивается соответствующими буквами, значение первого и последнего элементов возвращаемого массива равно String.Empty.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = "[a-z]+";
      string input = "Abc1234Def5678Ghi9012Jklm";
      string[] result = Regex.Split(input, pattern, 
                                    RegexOptions.IgnoreCase);
      for (int ctr = 0; ctr < result.Length; ctr++) {
         Console.Write("'{0}'", result[ctr]);
         if (ctr < result.Length - 1) 
            Console.Write(", ");
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//       '', '1234', '5678', '9012', ''
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "[a-z]+"
      Dim input As String = "Abc1234Def5678Ghi9012Jklm"
      Dim result() As String = Regex.Split(input, pattern, 
                                           RegexOptions.IgnoreCase)
      For ctr As Integer = 0 To result.Length - 1
         Console.Write("'{0}'", result(ctr))
         If ctr < result.Length - 1 Then Console.Write(", ")
      Next
      Console.WriteLine()
   End Sub               
End Module
' The example displays the following output:
'       '', '1234', '5678', '9012', ''

Если в выражении используются круглые скобки, любой Regex.Split захваченный текст включается в результирующий массив строк. Например, если разделить строку "сливы-груша" на дефис, помещенный в круглые скобки, возвращаемый массив будет содержать строковый элемент, содержащий дефис.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "plum-pear";
      string pattern = "(-)";

      string[] substrings = Regex.Split(input, pattern);    // Split on hyphens
      foreach (string match in substrings)
      {
         Console.WriteLine("'{0}'", match);
      }
   }
}
// The example displays the following output:
//    'plum'
//    '-'
//    'pear'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "plum-pear"
      Dim pattern As String = "(-)" 
      
      Dim substrings() As String = Regex.Split(input, pattern)    ' Split on hyphens.
      For Each match As String In substrings
         Console.WriteLine("'{0}'", match)
      Next
   End Sub
End Module
' The method writes the following to the console:
'    'plum'
'    '-'
'    'pear'

Однако если шаблон регулярного выражения содержит несколько наборов записных скобок, поведение этого метода зависит от версии платформа .NET Framework. В платформа .NET Framework 1.0 и 1.1, если совпадение не найдено в первом наборе записных скобок, захваченный текст из дополнительных записных скобок не включается в возвращаемый массив. Начиная с платформа .NET Framework 2.0 весь захваченный текст также добавляется в возвращаемый массив. Например, следующий код использует два набора записных скобок для извлечения элементов даты, включая разделители дат, из строки даты. Первый набор скобок фиксирует дефис, а второй — косую черту. Если пример кода компилируется и выполняется в платформа .NET Framework 1.0 или 1.1, он исключает символы косой черты; если он компилируется и выполняется в платформа .NET Framework 2.0 или более поздних версий, он включает их.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = @"07/14/2007";   
      string pattern = @"(-)|(/)";

      foreach (string result in Regex.Split(input, pattern)) 
      {
         Console.WriteLine("'{0}'", result);
      }
   }
}
// In .NET 1.0 and 1.1, the method returns an array of
// 3 elements, as follows:
//    '07'
//    '14'
//    '2007'
//
// In .NET 2.0 and later, the method returns an array of
// 5 elements, as follows:
//    '07'
//    '/'
//    '14'
//    '/'
//    '2007'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "07/14/2007"   
      Dim pattern As String = "(-)|(/)"
      For Each result As String In Regex.Split(input, pattern) 
         Console.WriteLine("'{0}'", result)
      Next
   End Sub
End Module
' In .NET 1.0 and 1.1, the method returns an array of
' 3 elements, as follows:
'    '07'
'    '14'
'    '2007'
'
' In .NET 2.0 and later, the method returns an array of
' 5 elements, as follows:
'    '07'
'    '/'
'    '14'
'    '/'
'    '2007'

Если регулярное выражение может соответствовать пустой строке, разделит строку на массив строк из одного символа, Split так как пустой разделитель строк можно найти в каждом месте.

Исключение RegexMatchTimeoutException возникает, если время выполнения операции разделения превышает интервал времени ожидания, указанный для домена приложения, в котором вызывается метод. Если время ожидания не определено в свойствах домена приложения или если значение времени ожидания равно Regex.InfiniteMatchTimeout, исключение не создается.

Примечания для тех, кто вызывает этот метод

Время ожидания этого метода истекает после интервала, равного значению времени ожидания по умолчанию для домена приложения, в котором вызывается метод. Если значение времени ожидания не определено для домена приложения, используется значение InfiniteMatchTimeout, которое предотвращает истечение времени ожидания метода. Рекомендуемый статический метод для разделения текста на соответствие шаблону — , Split(String, String, RegexOptions, TimeSpan)который позволяет задать интервал времени ожидания.

См. также раздел

Применяется к

Split(String, String, RegexOptions, TimeSpan)

Разделяет входную строку в массив подстрок в позициях, определенных указанным шаблоном регулярного выражения. Дополнительные параметры определяют параметры, которые изменяют соответствующую операцию и интервал времени ожидания, если совпадение не найдено.

public:
 static cli::array <System::String ^> ^ Split(System::String ^ input, System::String ^ pattern, System::Text::RegularExpressions::RegexOptions options, TimeSpan matchTimeout);
public static string[] Split (string input, string pattern, System.Text.RegularExpressions.RegexOptions options, TimeSpan matchTimeout);
static member Split : string * string * System.Text.RegularExpressions.RegexOptions * TimeSpan -> string[]
Public Shared Function Split (input As String, pattern As String, options As RegexOptions, matchTimeout As TimeSpan) As String()

Параметры

input
String

Строка для разделения.

pattern
String

Шаблон регулярного выражения для сопоставления.

options
RegexOptions

Побитовая комбинация значений перечисления, предоставляющая параметры для сопоставления.

matchTimeout
TimeSpan

Интервал времени ожидания или InfiniteMatchTimeout, чтобы указать, что метод не должен превышать время ожидания.

Возвращаемое значение

String[]

Массив строк.

Исключения

Произошла ошибка анализа регулярного выражения.

Параметр input или pattern имеет значение null.

Параметр options не является допустимой битовой комбинацией значений RegexOptions.

-или-

Значение параметра matchTimeout отрицательное, равно нулю или больше, чем приблизительно 24 дня.

Время ожидания истекло. Дополнительные сведения о времени ожидания см. в разделе "Примечания".

Комментарии

Методы Regex.Split аналогичны методу String.Split(Char[]) , за исключением того, что Regex.Split разбивает строку на разделитель, определяемый регулярным выражением, а не набором символов. Строка разбивается как можно больше раз. Если разделитель не найден, возвращаемое значение содержит один элемент, значение которого является исходной input строкой.

Параметр pattern состоит из элементов языка регулярных выражений, которые символично описывают соответствующую строку. Дополнительные сведения о регулярных выражениях см . в разделах Регулярные выражения .NET и Язык регулярных выражений — краткий справочник.

Важно!

Скомпилированные регулярные выражения, используемые в вызовах статических Split методов, кэшируются автоматически. Чтобы самостоятельно управлять временем существования скомпилированных регулярных выражений, используйте методы экземпляра Split .

Если несколько совпадений находятся рядом друг с другом, в массив вставляется пустая строка. Например, разделение строки на одном дефисе приводит к тому, что возвращаемый массив будет включать пустую строку в позиции, где находятся два смежных дефиса.

Если совпадение найдено в начале или конце входной строки, пустая строка включается в начало или конец возвращаемого массива. В следующем примере используется шаблон [a-z]+ регулярного выражения для разделения входной строки на любой буквенный или нижний буквенный символ. Так как строка начинается и заканчивается соответствующими буквами, значение первого и последнего элементов возвращаемого массива равно String.Empty.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = "[a-z]+";
      string input = "Abc1234Def5678Ghi9012Jklm";
      string[] result = Regex.Split(input, pattern, 
                                    RegexOptions.IgnoreCase,
                                    TimeSpan.FromMilliseconds(500));
      for (int ctr = 0; ctr < result.Length; ctr++) {
         Console.Write("'{0}'", result[ctr]);
         if (ctr < result.Length - 1) 
            Console.Write(", ");
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//       '', '1234', '5678', '9012', ''
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "[a-z]+"
      Dim input As String = "Abc1234Def5678Ghi9012Jklm"
      Dim result() As String = Regex.Split(input, pattern, 
                                           RegexOptions.IgnoreCase,
                                           TimeSpan.FromMilliseconds(500))
      For ctr As Integer = 0 To result.Length - 1
         Console.Write("'{0}'", result(ctr))
         If ctr < result.Length - 1 Then Console.Write(", ")
      Next
      Console.WriteLine()
   End Sub               
End Module
' The example displays the following output:
'       '', '1234', '5678', '9012', ''

Если в выражении используются круглые скобки, любой Regex.Split захваченный текст включается в результирующий массив строк. Например, если разделить строку "сливы-груша" на дефис, помещенный в круглые скобки, возвращаемый массив будет содержать строковый элемент, содержащий дефис.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = "plum-pear";
      string pattern = "(-)";

      string[] substrings = Regex.Split(input, pattern);    // Split on hyphens
      foreach (string match in substrings)
      {
         Console.WriteLine("'{0}'", match);
      }
   }
}
// The example displays the following output:
//    'plum'
//    '-'
//    'pear'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "plum-pear"
      Dim pattern As String = "(-)" 
      
      Dim substrings() As String = Regex.Split(input, pattern)    ' Split on hyphens.
      For Each match As String In substrings
         Console.WriteLine("'{0}'", match)
      Next
   End Sub
End Module
' The method writes the following to the console:
'    'plum'
'    '-'
'    'pear'

Однако если шаблон регулярного выражения содержит несколько наборов записных скобок, поведение этого метода зависит от версии платформа .NET Framework. В платформа .NET Framework 1.0 и 1.1, если совпадение не найдено в первом наборе записных скобок, захваченный текст из дополнительных записных скобок не включается в возвращаемый массив. Начиная с платформа .NET Framework 2.0 весь захваченный текст также добавляется в возвращаемый массив. Например, следующий код использует два набора записных скобок для извлечения элементов даты, включая разделители дат, из строки даты. Первый набор скобок фиксирует дефис, а второй — косую черту. Если пример кода компилируется и выполняется в платформа .NET Framework 1.0 или 1.1, он исключает символы косой черты; если он компилируется и выполняется в платформа .NET Framework 2.0 или более поздних версий, он включает их.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string input = @"07/14/2007";   
      string pattern = @"(-)|(/)";

      foreach (string result in Regex.Split(input, pattern)) 
      {
         Console.WriteLine("'{0}'", result);
      }
   }
}
// In .NET 1.0 and 1.1, the method returns an array of
// 3 elements, as follows:
//    '07'
//    '14'
//    '2007'
//
// In .NET 2.0 and later, the method returns an array of
// 5 elements, as follows:
//    '07'
//    '/'
//    '14'
//    '/'
//    '2007'
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim input As String = "07/14/2007"   
      Dim pattern As String = "(-)|(/)"
      For Each result As String In Regex.Split(input, pattern) 
         Console.WriteLine("'{0}'", result)
      Next
   End Sub
End Module
' In .NET 1.0 and 1.1, the method returns an array of
' 3 elements, as follows:
'    '07'
'    '14'
'    '2007'
'
' In .NET 2.0 and later, the method returns an array of
' 5 elements, as follows:
'    '07'
'    '/'
'    '14'
'    '/'
'    '2007'

Если регулярное выражение может соответствовать пустой строке, разделит строку на массив строк из одного символа, Split так как пустой разделитель строк можно найти в каждом месте.

Параметр matchTimeout указывает, как долго метод сопоставления шаблонов должен пытаться найти совпадение до истечения времени ожидания. Установка интервала времени ожидания предотвращает появление регулярных выражений, которые зависят от чрезмерного обратного отслеживания, чтобы перестать отвечать при обработке входных данных, содержащих почти совпадения. Дополнительные сведения см. в разделе Рекомендации по регулярным выражениям и обратному отслеживанию. Если совпадение не найдено в течение этого интервала времени, метод создает RegexMatchTimeoutException исключение. matchTimeout Переопределяет любое значение времени ожидания по умолчанию, определенное для домена приложения, в котором выполняется метод.

Примечания для тех, кто вызывает этот метод

Рекомендуется задать для параметра соответствующее matchTimeout значение, например две секунды. Если отключить время ожидания, указав InfiniteMatchTimeout, подсистема регулярных выражений обеспечивает немного более высокую производительность. Однако отключать время ожидания следует только при следующих условиях:

  • Когда входные данные, обрабатываемые регулярным выражением, являются производными от известного и доверенного источника или состоят из статического текста. Это исключает текст, который был динамически введен пользователями.

  • Если шаблон регулярного выражения был тщательно протестирован, чтобы убедиться, что он эффективно обрабатывает совпадения, несоверчатые и близкие совпадения.

  • Если шаблон регулярного выражения не содержит языковых элементов, которые, как известно, приводят к чрезмерному возврату при обработке близкого совпадения.

См. также раздел

Применяется к