3

我有一个字符串:CategoryName

我需要在Category和之间添加空格Name

所以我必须在每个大写字母之前插入一个空格。

4

3 回答 3

5
var input = "CategoryName";
var result = Regex.Replace(input, "([a-z])([A-Z])", @"$1 $2"); //Category Name

更新(这会将大写字母序列视为一个单词)

var input = "SimpleHTTPRequest";
var result = Regex.Replace(input, "([a-z]|[A-Z]{2,})([A-Z])", @"$1 $2");
//Simple HTTP Request
于 2013-04-16T08:20:51.247 回答
4

这段代码将完成这项工作

var source = "CategoryName";
var nameConvert = new Regex(@"((?<=[a-z])[A-Z]|(?<!^|\s)[A-Z][a-z])");
var converted = nameConvert.Replace(source, " $1");

这会将多个大写字母放在一起,例如FearTheCIAReally变成Fear The CIA Really

解释正则表达式:

  • (开始捕获组 $1
  • (?<=[a-z])[A-Z]大写字母前面是小写字母(不要捕获小写字母)
  • |或者
  • (?<!^|\s)前面的字符不是空格或字符串的开头,但不捕获
  • [A-Z]大写字母
  • [a-z]后跟一个小写字母
  • )结束捕获组 1

实际上,我将其作为我一直使用的库函数

public static class StringExtensions {

   private static readonly Regex NameConvert =
                new Regex(@"((?<=[a-z])[A-Z]|(?<!^|\s)[A-Z][a-z])");

   public static string ToDisplayFormat(this string name) {
     return string.IsNullOrEmpty(name) ? 
       String.Empty :
       NameConvert.Replace(name," $1");
   }
}

然后我可以在代码中使用它

var name="CategoryName";
var displayName = name.ToDisplayFormat();
于 2013-04-16T08:20:27.230 回答
0
([A-Z?])[_ ]?([a-z])

试试这个正则表达式。

希望能帮助到你。

于 2013-04-16T08:17:28.430 回答