14

How can I split a string such as "Mar10" into "Mar" and "10" in c#? The format of the string will always be letters then numbers so I can use the first instance of a number as an indicator for where to split the string.

Addie
  • 1,653
  • 5
  • 21
  • 32

4 Answers4

20

You could do this:

var match = Regex.Match(yourString, "(\w+)(\d+)");
var month = match.Groups[0].Value;
var day = int.Parse(match.Groups[1].Value);
Konrad Rudolph
  • 530,221
  • 131
  • 937
  • 1,214
6

You are not saying it directly, but from your example it seems are you just trying to parse a date.

If that's true, how about this solution:

DateTime date;
if(DateTime.TryParseExact("Mar10", "MMMdd", new CultureInfo("en-US"), DateTimeStyles.None, out date))
{
    Console.WriteLine(date.Month);
    Console.WriteLine(date.Day);
}
Sergej Andrejev
  • 9,091
  • 11
  • 71
  • 108
5
var match = Regex.Match(yourString, "([|A-Z|a-z| ]*)([\d]*)");
var month = match.Groups[1].Value;
var day = int.Parse(match.Groups[2].Value);

I tried Konrad's answer above, but it didn't quite work when I entered it into RegexPlanet. Also the Groups[0] returns the whole string Mar10. You want to start with Groups[1], which should return Mar and Groups[2] should return 10.

Richard Erickson
  • 2,568
  • 8
  • 26
  • 39
3
char[] array = "Mar10".ToCharArray();
int index = 0;
for(int i=0;i<array.Length;i++)
{
   if (Char.IsNumber(array[i]){
      index = i;
      break;
   }
}

Index will indicate split position.

sashaeve
  • 9,387
  • 10
  • 48
  • 61