7
votes

Split String Pascalcase Sauf pour les acronymes

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 ar bs forte>. Voici ce que nous avons, ce que je sais est insuffisant pour les acronymes:

string friendlyName = Regex.Replace(field.Name, "([A-Z][a-z]+)", " $1", RegexOptions.Compiled).Trim();


1 commentaires

Malheureusement, ce problème peut se retrouver avec une ambiguïté non résolue, par exemple configurideaseAser Split à "Configurer l'IDE en tant qu'utilisateur" ou "Configurer l'utilisateur des idées"?


3 Réponses :


12
votes

ne serait pas [a-z] + [a-z] * le faire? Cela devrait correspondre à une ou plusieurs lettres majuscules suivies de lettres zéro ou plus minuscules. Donc, arbs resterait une seule entité, mais camelcase serait divisé en écrans chameau . .


3 commentaires

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 une partie de l'acronyme.



0
votes

Que diriez-vous de cela? XXX


0 commentaires

0
votes

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>

CODE: strong> Passez la chaîne d'entrée sur la méthode donnée ci-dessous. 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();
    }


1 commentaires

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.