6

文字列に大文字やアンダースコアが含まれる場合、スペースを追加したいと考えています。

どうすればいいですか?

例 1

入力

ThisIsAnInputString

出力(結果)

This Is An Input String

例 2

入力

This_Is_An_Input_String

出力(結果)

This Is An Input String
4

6 に答える 6

13

小文字の後に大文字が続き、その間にオプションのアンダースコアが続く正規表現を使用できます。

string output = Regex.Replace(input, "([a-z])_?([A-Z])", "$1 $2");

これを使用して、1 文字の単語も処理したい場合があります。

string output = Regex.Replace(input, "(?<!^)_?([A-Z])", " $1");
于 2013-02-18T23:14:08.187 に答える
3

アンダースコア:

string inputString = "This_Is_An_Input_String";
string resultString = inputString.Replace('_', ' ');

首都:

string inputString = "ThisIsAnInputString";
//this will put a space before all capitals that are preceded by a lowercase character
string resultString = Regex.Replace(inputString, @"([a-z])([A-Z])", "$1 $2");
于 2013-02-18T23:31:04.687 に答える
1

仕様によると、大文字の前にスペースを追加したいとします。これは最初の文字にも当てはまります。アンダースコアはすべてスペースに置き換える必要があります。ここでのほとんどの回答では、最初のスペース ( の前This) が省略されています。

var pattern = "([a-z?])[_ ]?([A-Z])";

var input = "ThisIsATest";
var output = Regex.Replace(input, pattern, "$1 $2");
// output = " This Is A Test"

var input = "This_Is_A_Test";
var output = Regex.Replace(input, pattern, "$1 $2");
// output = " This Is A Test"

var input = "ThisIsAnInputString";
var output = Regex.Replace(input, pattern, "$1 $2");
// output = " This Is An Input String"

var input = "This_Is_An_Input_String";
var output = Regex.Replace(input, pattern, "$1 $2");
// output = " This Is An Input String"

最初に余分なスペースが必要ない場合は、 TrimStartを使用してください

var input = "This_Is_A_Test";
var output = Regex.Replace(input, pattern, "$1 $2").TrimStart(' ');
// output = "This Is A Test"

編集(更新):

結果を検証するために、さまざまな正規表現の提案を小さなテスト アプリケーションにコンパイルしました。

static void Main(string[] args)
{
  const string expectedResult = "This Is A Test";
  var samples = new string[][]
      {
        new [] {"This Is A Test", "This Is A Test"},
        new [] {"ThisIsATest", "This Is A Test"},
        new [] {"This_Is_A_Test", "This Is A Test"},
        new [] {"ThisIsA_Test", "This Is A Test"},
        new [] {"This_IsATest", "This Is A Test"},
        new [] {"_ThisIsATest", "This Is A Test"},
        new [] {"_This_Is_A_Test", "This Is A Test"},
        new [] {"Thi_s_Is_A_Test", "Thi s Is A Test"},
        new [] {"T hi_s_Is_A_Te s_ t", "T hi s Is A Te s  t"}
      };

  foreach (var input in samples)
  {
    Console.WriteLine(input[0] + " => " + input[1]);

    // Guffa 1 1/9 correct.
    Console.WriteLine("Guffa 1:         " + (Regex.Replace(input[0], @"([a-z])_?([A-Z])", "$1 $2") == input[1]));

    // Guffa 2 4/9 correct.
    Console.WriteLine("Guffa 2:         " + (Regex.Replace(input[0], @"(?<!^)_?([A-Z])", " $1") == input[1]));

    // Abe Miesler 1/9 correct.
    Console.WriteLine("Abe Miesler:     " + (Regex.Replace(input[0], @"([a-zA-Z])_?([A-Z])", "$1 $2") == input[1]));

    // AppDeveloper 2/9 correct. (Not entirely fair since it was not meant for underscores).
    Console.WriteLine("AppDeveloper:    " + (Regex.Replace(input[0], @"_([A-Z])", " $1") == input[1]));

    // sparky68967 1/9 correct. (Not entirely fair since it was not meant for underscores).
    Console.WriteLine("sparky68967:     " + (Regex.Replace(input[0], @"([a-z])([A-Z])", "$1 $2") == input[1]));

    // p.s.w.g 4/9 correct.
    Console.WriteLine("p.s.w.g:         " + (Regex.Replace(Regex.Replace(input[0], @"([A-Z]+)([A-Z][a-z])", "$1_$2"), "_", " ") == input[1]));

    // Sani Huttunen 1 7/9 correct.
    Console.WriteLine("Sani Huttunen 1: " + (Regex.Replace(input[0], @"([a-z]?)[_ ]?([A-Z])", "$1 $2").TrimStart(' ') == input[1]));

    // Sani Huttunen 2 9/9 correct.
    Console.WriteLine("Sani Huttunen 2: " + (Regex.Replace(input[0].Replace('_', ' '), @"(?<!^)[ ]?([A-Z])", " $1").TrimStart(' ') == input[1]));

    Console.WriteLine();
  }
}
于 2013-02-19T00:47:34.193 に答える
0

入力タイプの場合:ThisIsAnInputString

        string input1 = "ThisIsAnInputString";
        StringBuilder builder = new StringBuilder();

        foreach (char c in input1)
        {
            if (Char.IsUpper(c))
            {
                builder.Append(' ');
                builder.Append(c);
            }
            else
            {
                builder.Append(c);
            }
        }

        string output = builder.ToString().Trim();

入力タイプの場合:This_Is_An_Input_String

string input2 = "This_Is_An_Input_String";
string output = Regex.Replace(input2, "_([A-Z])", " $1");
于 2013-02-18T23:09:57.083 に答える
0
    // check if string is empty
        if (string.IsNullOrEmpty(input))
            return string.Empty;


        if (input.Contains('_'))
        {
            return input.Replace('_', ' ');
        }
        else
        {
            StringBuilder newString = new StringBuilder();
            foreach (Char char1 in input)
            {
                if (char.IsUpper(char1))
                    newString.Append(new char[] { ' ', char1 });
                else
                    newString.Append(char1);
            }

            newString.Remove(0, 1);
            return newString.ToString();
        }
于 2013-02-18T23:18:21.877 に答える
0
    static void Main(string[] args)
    {
        String str = "ThisIsAnInputString";
        String str2 = "This_Is_An_Input_String";

        Console.WriteLine(str);
        Console.WriteLine(str2);

        StringBuilder sb = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();

        str.ToCharArray().ToList().ForEach(c => sb.Append(c == '_' ? " " :  char.IsLower(c) ? c.ToString() : " " + c.ToString()));
        str2.ToCharArray().ToList().ForEach(c => sb2.Append(c == '_' ? " " : char.IsLower(c) ? c.ToString() : " " + c.ToString()));

        str = sb.ToString().Trim(" ".ToCharArray());
        str2 = sb2.ToString().Trim(" ".ToCharArray());

        Console.WriteLine(str);
        Console.WriteLine(str2);



        Console.Read();
    }
于 2013-02-18T23:18:26.863 に答える