在将CamelCase转换为带空格的字符串时忽略现有空格

Cia*_*tin 8 .net c# regex

我想分开camelCasePascalCase单词空格分开单词集合.

到目前为止,我有:

Regex.Replace(value, @"(\B[A-Z]+?(?=[A-Z][^A-Z])|\B[A-Z]+?(?=[^A-Z]))", " $0", RegexOptions.Compiled);
Run Code Online (Sandbox Code Playgroud)

它适用于将"TestWord"转换为"Test Word"并保持单个单词不变,例如Testing遗留Testing.

然而,ABCTest转换到A B C Test我想要的时候ABC Test.

tho*_*dic 4

尝试:

\n
[A-Z][a-z]+|[A-Z]+(?=[A-Z][a-z])|[a-z]+|[A-Z]+\n
Run Code Online (Sandbox Code Playgroud)\n

Regex101 上的示例

\n
\n

在CS中如何使用?

\n
string strText = " TestWord asdfDasdf  ABCDef";\n        \nstring[] matches = Regex.Matches(strText, @"[A-Z][a-z]+|[A-Z]+(?=[A-Z][a-z])|[a-z]+|[A-Z]+")\n                .Cast<Match>()\n                .Select(m => m.Value)\n                .ToArray();\n            \nstring result = String.Join(" ", matches);\n
Run Code Online (Sandbox Code Playgroud)\n

result=\'Test Word asdf Dasdf ABC Def\'

\n
\n

怎么运行的

\n

在示例字符串中:

\n
[A-Z][a-z]+|[A-Z]+(?=[A-Z][a-z])|[a-z]+|[A-Z]+\n
Run Code Online (Sandbox Code Playgroud)\n

[A-Z][a-z]+火柴:

\n
    \n
  • [0-4] Test
  • \n
  • [4-8] Word
  • \n
  • [13-18]Dasdf
  • \n
  • [22-26]Test
  • \n
  • [27-34]Testing
  • \n
  • [45-50]Camel
  • \n
  • [50-54]Case
  • \n
  • [68-73]Aasdf
  • \n
  • [74-76]Aa
  • \n
  • [76-79]Bbb
  • \n
\n

[A-Z]+(?=[A-Z][a-z])火柴:

\n
    \n
  • [19-22]ABC
  • \n
\n

[a-z]+火柴:

\n
    \n
  • [9-13] qwer
  • \n
  • [64-68] asdf
  • \n
\n

[A-Z]+火柴:

\n
    \n
  • [79-81] CD
  • \n
\n