我有一个字符串:CategoryName
我需要在Category
和之间添加空格Name
。
所以我必须在每个大写字母之前插入一个空格。
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
这段代码将完成这项工作
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();
([A-Z?])[_ ]?([a-z])
试试这个正则表达式。
希望能帮助到你。