C# 正则表达式选择[A-Z],两个连续空格除外

C# 正则表达式选择[A-Z],两个连续空格除外,c#,regex,string,C#,Regex,String,我一直在尝试创建一个正则表达式来匹配a-Z和单个空格中的所有字母。我希望它在超过1个连续空格时停止。我也不想包括破折号。在基于C的程序中,它被调用并作为字符串返回。我计划在导入字符串后,将其结尾处的字符串裁剪为1,以删除结尾处的空格(如果它最终由正则表达式返回) TERRA MARVELLOUS LUX - 到目前为止,我已经尝试了多种表达方式,到目前为止,我能想到的最好的表达方式是 ^[A-Z (?!\s{2,})]* 以及 ^[A-Z ]*(?:\s{2}) 所以我可以列出更

我一直在尝试创建一个正则表达式来匹配a-Z和单个空格中的所有字母。我希望它在超过1个连续空格时停止。我也不想包括破折号。在基于C的程序中,它被调用并作为字符串返回。我计划在导入字符串后,将其结尾处的字符串裁剪为1,以删除结尾处的空格(如果它最终由正则表达式返回)

TERRA MARVELLOUS LUX      -
到目前为止,我已经尝试了多种表达方式,到目前为止,我能想到的最好的表达方式是

^[A-Z (?!\s{2,})]*
以及

^[A-Z ]*(?:\s{2})
所以我可以列出更多我一直在尝试的东西。我被卡住了

^[A-Z ]+\b
你可以试试这个。看演示


这将解决您的问题:

([A-Z]+[ ]{1})+
其主要思想是匹配A-Z中至少一个字符的所有组,然后有一个空格并至少匹配一次模式

举个例子:

如果只想用连字符去掉最后的空格,可以使用

 var t1 = "TERRA MARVELLOUS  LUX      -";
 var rx2 = new Regex(@"\s+\-?$");
 var res = rx2.Replace(t1, string.Empty);

如果一行中有多个字符串被两个空格分隔,这并没有什么帮助,但我不知道是否有可能,问题还不清楚。这个正则表达式匹配TERRA Marvelous LUX在注释中删除的双空格,在Marvelous和LUX之间使用双空格。根据OP,当连续空格出现时,匹配不应包括以下内容。我不相信会发生,如果发生,我可能会重写它。但就目前而言,这种方法效果非常好。谢谢你的网站。“我用这个要好得多。@Stribizev我不太确定OP想要什么。如果他能做到这一点,你只想删除最后的空格和连字符,如果有的话?”?