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