2008-11-14 4 views
6

Me gustaría tomar una cadena con pasadores como "CountOfWidgets" y convertirla en algo más fácil de usar como "Count of Widgets" en C#. Múltiples caracteres adyacentes en mayúscula deben dejarse intactos. ¿Cuál es la forma más eficiente de hacer esto?Dividir una cadena Pascal-case en el conjunto lógico de palabras

NOTA: Duplicado de .NET - How can you split a "caps" delimited string into an array?

+0

Esto no es una cuestión duplicado porque la respuesta vinculada a no atender a "Múltiple el carácter en mayúscula adyacente debe dejarse intacto " – PandaWood

Respuesta

13

que no sabemos acerca eficiente, pero al menos es escueta:

Regex r = new Regex("([A-Z]+[a-z]+)"); 
string result = r.Replace("CountOfWidgets", m => (m.Value.Length > 3 ? m.Value : m.Value.ToLower()) + " "); 
+0

Esto deja un espacio al final de" FormatRange "->" FormatRange "- por lo que un ajuste sería útil y la verificación de la Longitud de 3 es una forma poco confiable de garantizar" mayúsculas adyacentes múltiples deben ser izquierda intacta". Esto solo espera que quede algo menos de 3 caracteres. Entonces, "PubID" va a "publ ID" que no es correcto – PandaWood

Cuestiones relacionadas