C# 正则表达式,用于在连续大写字母序列的最后一个之前添加空格

C# 正则表达式,用于在连续大写字母序列的最后一个之前添加空格,c#,regex,C#,Regex,在花了太多时间试图弄明白这一点之后,我已经放弃了,并且认为我会看看是否有人想要尝试 我需要一个正则表达式,它将在最后一个连续的大写字母之前插入一个空格,其中有两个以上的连续大写字母 例如: A = A AB = AB ABC = AB C ABCD = ABC D abCdefGHijkLMNop = abCdefGHijkLM Nop 此regexp将包含以下组: ([A-Z]{2,})([A-Z]+) 然后您只需输出组1,一个空格,组2,这个regexp将组: ([A-Z]{2,})([

在花了太多时间试图弄明白这一点之后,我已经放弃了,并且认为我会看看是否有人想要尝试

我需要一个正则表达式,它将在最后一个连续的大写字母之前插入一个空格,其中有两个以上的连续大写字母

例如:

A = A
AB = AB
ABC = AB C
ABCD = ABC D
abCdefGHijkLMNop = abCdefGHijkLM Nop

此regexp将包含以下组:

([A-Z]{2,})([A-Z]+)

然后您只需输出组1,一个空格,组2,这个regexp将组:

([A-Z]{2,})([A-Z]+)
string str = "ABC";
str = Regex.Replace(str, @"([A-Z]{2,})([A-Z])", "$1 $2"); 

Console.WriteLine(str);    // "AB C"
然后,您只需输出组1、一个空格、组2的替换项即可

string str = "ABC";
str = Regex.Replace(str, @"([A-Z]{2,})([A-Z])", "$1 $2"); 

Console.WriteLine(str);    // "AB C"
string output=Regex.Replace(input, @"(?<=[A-Z]{2})(?=[A-Z][^A-Z]|[A-Z]$)", " ");
string output=Regex.Replace(输入,@)(?替换

string output=Regex.Replace(input, @"(?<=[A-Z]{2})(?=[A-Z][^A-Z]|[A-Z]$)", " ");

string output=Regex.Replace(input,@)(?为什么是Regex而不是'for'?为什么是Regex而不是'for'?在替换项的第一个选项末尾不需要一个
$
?此外,替换项显示的是空字符串,而不是空格。替换项是“capital后跟一个非capital,或在字符串末尾显示大写”…我认为这是合适的。(但我没有真正插入任何内容,这很好理解。)您不需要在替换中的第一个选项末尾添加
$
吗?此外,您的替换项显示空字符串,而不是空格。替换为“大写,然后是非大写,或者在字符串末尾添加大写”…我认为这是合适的。(但我没有实际插入任何内容,这是一个很好的发现)已修复:),无论如何,你的答案更好。^^这是否匹配到两个组,第一个组是整个字符串?第1组是匹配的第一部分
LM
在最后一个示例中,第2组是
N
。是否有办法将字符串的整个第一部分匹配为第1组(或者我的测试错误)?@Walls我认为通过
输出
您需要阅读
替换为
,而不是
作为您的整个结果使用
。修复:),无论如何,你的答案更好。^^这是否匹配到两个组,第一个组是整个字符串?第1组是匹配的第一部分
LM
在最后一个示例中,第2组是
N
。是否有办法将字符串的整个第一部分匹配为第1组(或者我的测试错误)?@Walls我认为通过
输出
您需要阅读
替换为
,而不是
作为整个结果使用