2012-01-25 16 views
10

Tengo una cadena "JUEVES 26 DE ENERO DE 2011".C# ToTitleCase y fechas/horas con formato de texto

Cuando formateo esto utilizando CultureInfo.ToTitleCase():

var dateString = "THURSDAY 26th JANUARY 2011"; 
var titleString = myCultureInfoObject.TextInfo.ToTitleCase(dateString); 

Se muestra así: "Thursday 26Th January 2011". Esto es exactamente lo que necesito ... excepto el T en 26Th se ha puesto en mayúscula. ¿Hay alguna manera de evitar que esto suceda, ya que es una fecha y se ve mal? Es decir, ¿solo personajes con título que no tienen un número directamente delante de ellos?

Respuesta

8

Se podría utilizar una expresión regular con una MatchEvaluator poner sólo las palabras "reales" en caso de título:

var dateString = "THURSDAY 26th JANUARY 2011"; 
MatchEvaluator ev = m => myCultureInfoObject.TextInfo.ToTitleCase(m.Value); 
var titleString = Regex.Replace(dateString, @"\b[a-zA-Z]+\b", ev); 

Esto se aplicará caso de título sólo a "Jueves" y "Enero", pero no "26º" porque no coincide con el patrón de expresiones regulares.

+3

+1 - nice .... pero ¿qué es lo que dicen sobre resolver un problema con expresiones regulares? Ahora tienes dos problemas. :) –

+5

¡Todos retrocedan! http://xkcd.com/208/ – jrummell

Cuestiones relacionadas