Regular expression to split string and number

40,669

Solution 1

I know you asked for the Split method, but as an alternative you could use named capturing groups:

var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)(?<Numeric>[0-9]*)");
var match = numAlpha.Match("codename123");

var alpha = match.Groups["Alpha"].Value;
var num = match.Groups["Numeric"].Value;

Solution 2

splitArray = Regex.Split("codename123", @"(?<=\p{L})(?=\p{N})");

will split between a Unicode letter and a Unicode digit.

Solution 3

Regex is a little heavy handed for this, if your string is always of that form. You could use

"codename123".IndexOfAny(new char[] {'1','2','3','4','5','6','7','8','9','0'})

and two calls to Substring.

Solution 4

A little verbose, but

Regex.Split( "codename123", @"(?<=[a-zA-Z])(?=\d)" );

Can you be more specific about your requirements? Maybe a few other input examples.

Solution 5

IMO, it would be a lot easier to find matches, like:

Regex.Matches("codename123", @"[a-zA-Z]+|\d+")
     .Cast<Match>()
     .Select(m => m.Value)
     .ToArray();

rather than to use Regex.Split.

Share:
40,669
Yinda Yin
Author by

Yinda Yin

I have been a software developer for many years. I have written software for NASA, developed a Practice Management program for CPA's, and have worked at a compliance management company doing cutting-edge work in C#, WPF and Aurelia. I am a strong believer in code clarity and simplicity.

Updated on July 09, 2022

Comments

  • Yinda Yin
    Yinda Yin almost 2 years

    I have a string of the form:

    codename123
    

    Is there a regular expression that can be used with Regex.Split() to split the alphabetic part and the numeric part into a two-element string array?