Regex.Split Method (String)
Splits the specified input string at the positions defined by a regular expression pattern specified in the Regex constructor.
Assembly: System (in System.dll)
Parameters
- input
- Type: System.String
The string to split.
| Exception | Condition |
|---|---|
| ArgumentNullException |
input is null. |
The Regex.Split(String) method is similar to the String.Split(Char[]) method, except this method splits the string at a delimiter determined by a regular expression instead of a set of characters. The string is split as many times as possible. If no delimiter is found, the return value contains one element whose value is the original input string.
If multiple matches are adjacent to one another, an empty string is inserted into the array. For example, splitting a string on a single hyphen causes the returned array to include an empty string in the position where two adjacent hyphens are found, as the following code shows.
If capturing parentheses are used in a Regex.Split expression, any captured text is included in the resulting string array. For example, splitting the string " plum-pear" on a hyphen placed within capturing parentheses adds a string element that contains the hyphen to the returned array.
However, when the regular expression pattern includes multiple sets of capturing parentheses, the behavior of this method depends on the version of the .NET Framework. In the .NET Framework versions 1.0 and 1.1, if a match is not found within the first set of capturing parentheses, captured text from additional capturing parentheses is not included in the returned array. In the .NET Framework version 2.0, all captured text is also added to the returned array. For example, the following code uses two sets of capturing parentheses to extract the elements of a date, including the date delimiters, from a date string. The first set of capturing parentheses captures the hyphen, while the second set captures the forward slash. If the example code is compiled and run under the .NET Framework 1.0 or 1.1, it excludes the slash characters; if it is compiled and run under the .NET Framework 2.0, it includes them.
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, the method returns an array of // 5 elements, as follows: // '07' // '/' // '14' // '/' // '2007'
If the regular expression can match the empty string, Split(String) will split the string into an array of single-character strings because the empty string delimiter can be found at every location. For example:
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 produces the following output: // {, c, h, a, r, a, c, t, e, r, s, }
Note that the returned array also includes an empty string at the beginning and end of the array.
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Hi,
Is there a way to get the string Array without empty string after split even if the input string had two adjacent separator character? Either string or RegEx provide this option?
Eg:
string path = ".senthil..manickavel.."
result = path.Split('.');
I need the result as "senthil, "manickavel"
Eliminating the empty array elements
The best way to do this, especially if you are splitting a string on a literal expression rather than a pattern, is to call one of the String.Split overloads that has a StringSplitOptions parameter, which you would pass StringSplitOptions.RemoveEmptyEntries. For example:
string[] results2 = path.Split(new char[] {'.'}, StringSplitOptions.RemoveEmptyEntries);
--Ron Petrusha
Common Language Runtime Developer Content Team
Microsoft Corporation
- 8/13/2010
- Senthil Manickavel
- 11/10/2010
- R Petrusha - MSFT