2010-03-02 22 views
10

¿Cómo puedo dividir una cadena como "Mar10" en "Mar" y "10" en C#? El formato de la cadena siempre será letras y luego números para poder usar la primera instancia de un número como un indicador de dónde dividir la cadena.¿Cómo puedo dividir una cadena en C# según letras y números?

+1

No siempre tiene exactamente tres caracteres, ¿verdad? 12 de diciembre, 5 de enero, 17 de julio ... – tanascius

+0

Sí, en este caso lo hago. 3 caracteres para la fecha y 2 para el año. – Addie

Respuesta

14

Usted puede hacer esto:

var match = Regex.Match(yourString, "(\w+)(\d+)"); 
var month = match.Groups[0].Value; 
var day = int.Parse(match.Groups[1].Value); 
Índice
3
char[] array = "Mar10".ToCharArray(); 
int index = 0; 
for(int i=0;i<array.Length;i++) 
{ 
    if (Char.IsNumber(array[i]){ 
     index = i; 
     break; 
    } 
} 

indicará posición de división.

5

No lo dice directamente, pero de su ejemplo parece que está tratando de analizar una fecha.

Si eso es cierto, ¿qué hay de esta solución:

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

me trataron respuesta de Konrad arriba, pero no funcionó bastante cuando entré en RegexPlanet. También el Groups[0] devuelve la cadena completa Mar10. Desea comenzar con Groups[1], que debe devolver Mar y Groups[2] debe devolver 10.

Cuestiones relacionadas