J'ai une liste de mots qui doivent être fabriqués à l'homme lisible, tels que prénom au prénom, nom de famille au nom de famille, et dans certains cas, des acronymes comme ARBS à rester comme cela. Ce dernier a récemment été introduit et a provoqué un problème d'affichage depuis que notre expression régulière revient string friendlyName = Regex.Replace(field.Name, "([A-Z][a-z]+)", " $1", RegexOptions.Compiled).Trim();
3 Réponses :
ne serait pas [a-z] + [a-z] * code> le faire? Cela devrait correspondre à une ou plusieurs lettres majuscules suivies de lettres zéro ou plus minuscules. Donc,
arbs code> resterait une seule entité, mais
camelcase code> serait divisé en écrans
chameau code>. P>.
Grande solution. Y a-t-il un moyen d'obtenir "ci-dessous" des données GPS "? Je peux voir où ce serait difficile. Mais je supposerais que s'il y a un caractère minuscule après un ensemble de caractères majuscules que la dernière partie supérieure ne fait pas partie de l'acronyme.
Effectivement compris. Utilisez (? ici
@Gandiseur: La question indique le contraire - "ARBS" a un caractère minuscule après un groupe de majuscules et la dernière partie supérieure (b) est i> une partie de l'acronyme.
Que diriez-vous de cela?
Une chaîne / paragraphe / phrase comprenant des acronymes peut être convertie en phrases / chaînes lisibles humaines. J'essaie juste d'essayer de formater la chaîne de boîtiers Pascal, j'ai étudié plus et essayé même de convertir des acronymes au format compréhensible.
Données de test EM>: P> Intrée: forte> "qwertysomething omittryshanithinghanithentillanthanithentillant-ceghing Peut-être" P> Sortie: Strong> "QWERTY Quelque chose omettez, essayez une chose peut fonctionner FYI" P> private static string FormatPascalAndAcronym(string input)
{
var builder = new StringBuilder(input[0].ToString());
if (builder.Length > 0)
{
for (var index = 1; index < input.Length; index++)
{
char prevChar = input[index - 1];
char nextChar = index + 1 < input.Length ? input[index + 1] : '\0';
bool isNextLower = Char.IsLower(nextChar);
bool isNextUpper = Char.IsUpper(nextChar);
bool isPresentUpper = Char.IsUpper(input[index]);
bool isPrevLower = Char.IsLower(prevChar);
bool isPrevUpper = Char.IsUpper(prevChar);
if(!string.IsNullOrWhiteSpace(prevChar.ToString()) &&
((isPrevUpper&& isPresentUpper && isNextLower) ||
(isPrevLower&&isPresentUpper&&isNextLower)||
(isPrevLower&&isPresentUpper&&isNextUpper)))
{
builder.Append(' ');
builder.Append(input[index]);
}
else{
builder.Append(input[index]);
}
}
}
return builder.ToString();
}
Cela fait la mauvaise chose pour le seul cas de test mentionné dans la question. Même si c'est probablement la bonne règle pour tout le monde.
Malheureusement, ce problème peut se retrouver avec une ambiguïté non résolue, par exemple
configurideaseAser code> Split à "Configurer l'IDE en tant qu'utilisateur" ou "Configurer l'utilisateur des idées"?