7

FirstName を First Name に、LastName を Last Name に、場合によっては ARB などの頭字語をそのまま残すなど、人間が読めるようにする必要がある単語のリストがあります。後者は最近導入されたもので、正規表現がAR Bsを返すため、表示上の問題が発生しています。これが私たちが持っているものですが、頭字語には不十分であることがわかっています。

([A-Z][a-z]+)

SO や他のサイトで頭字語を使用できる他の表現を見つけましたが、それらは頭字語が文字列全体ではなく文字列内にある文字列で機能します。簡単な正規表現はできますが、これは私のスキルでは難しすぎます。テスト用に他の例を提供しますが、新しいものである ARB を除いて、すべての文字列が正常に機能します。ありがとうございました。

更新:コードの使用法は次のとおりです

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

3 に答える 3

12

しません[A-Z]+[a-z]*か?これは、1 つ以上の大文字の後に 0 個以上の小文字が続くものと一致する必要があります。したがってARBs、単一のエンティティのままですが、CamelCaseに分割されCamel Caseます。

于 2011-12-13T21:44:42.070 に答える
0

頭字語を含む文字列/段落/文を人間が読める文/文字列に変換できます。Pascal Cased 文字列の書式設定を試みたところ、さらに調査し、頭字語をわかりやすい形式に変換することさえ試みました。

テストデータ:

入力: "QWERTYSomeThing OmitTRYSomeThing MayBeWorkingFYI"

出力: "QWERTY Some Thing Omit TRY Some Thing は参考までに動作する可能性があります"

コード: 入力文字列を以下のメソッドに渡します。

    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();
    }
于 2014-05-30T19:56:20.483 に答える