[英]Splitting words based on the occurrence of capital letter
从我是消费者的外部 API 收到一个字符串类型的类别。
在我们得到的值中,它们有一个共同的格式,就像
到目前为止,我们正在做的是将这个类别作为输入,并使用这种方法将它们分成多个带有空格的单词
public static string BreakCategoryIntoMultipleWords(string category)
{
StringBuilder builder = new StringBuilder();
string formatedWord = string.Empty;
if (category.All(c => char.IsUpper(c)))
{
formatedWord = category;
}
else
{
foreach (char c in category)
{
if (Char.IsUpper(c) && builder.Length > 0) builder.Append(' ');
builder.Append(c);
}
formatedWord = builder.ToString();
}
return formatedWord;
}
当前方法将为以下输入返回此值
还有第三种格式已被注意到
ABCXyxxx
XCVbbbb
RRDdddddddvvvv
所需的 output 是:
ABCXyxxx (输入) > ABC Xyxxx (因为大写字母 X 之后所有的字母都是小字母表示单词断了)
XCVbbbb (输入) > XC Vbbb (因为大写字母V之后所有的字母都是小字母表示单词已经断了)
RRDddddddvvvv (输入) > RR Dddddddvvvv (由于大写字母 D 后所有字母都很小表示单词已损坏)
我应该如何在现有方法中实现这一点,以便所有三种格式都能正常工作。
正则表达式方法: https://dotnetfiddle.net/42gyod
string result = new Regex("(?=[A-Z][a-z])").Replace(input, " ").TrimStart();
正则表达式的解释
(?= )
积极向前看 - 这匹配匹配之前的字符[AZ][az]
匹配一个大写和一个小写字母所以这会搜索一个大写字母和一个小写字母并在之前插入一个空格 - 请参阅https://regex101.com/r/PCSlOy/1
添加到@fubo 答案,您还可以使用Split
并避免TrimStart
:
var z = string.Join(' ', Regex.Split(s, "(?!^)(?=[A-Z][a-z])"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.