除了某些关键字之外,用大写字母拆分字符串

时间:2017-04-26 06:51:53

标签: c# .net string list

以下函数将字符串拆分为字符串中的任何大写字符。

public static string ToSentence(this string input)
{
   var list = new List<char>();
    for (var i = 0; i < input.ToCharArray().Length; i++)
    {
        var c = input.ToCharArray()[i];
        foreach (char c1 in i > 0 && char.IsUpper(c) ? new[] {' ', c} : new[] {c})
            list.Add(c1);
    }
    return new string(list.ToArray());
}

在我的代码中,此函数与另一个在代码中检索当前方法名称的函数一起使用。当方法名称按顺序包含多个大写字母时,我发现此函数会中断。

例如,如果我有一个名为GetDatabaseIDE()的方法,则会返回"Get Database I D E"

如何更改ToSentence功能,使其接受不会被拆分的关键字列表(例如,I D E变为IDE)?

4 个答案:

答案 0 :(得分:1)

为什么不试试Regex?演示@ https://dotnetfiddle.net/FsPZ9O
1. ([A-Z]+) - 匹配所有前导大写字母。
2. ([^A-Z])* - 跟随零或多的任何不是大写字符的。

Regex.Matches("GetDatabaseIDE", @"([A-Z]+)([^A-Z])*").Cast<Match>().Select(m => m.Value);

答案 1 :(得分:0)

TakeWhile方法在这里很有用,一旦找到大写字符,就可以使用以下大写字符:

part = MIMEApplication(open("file.pdf", 'rb').read(), 'pdf')
filename="file.pdf"
part.add_header('Content-Disposition', 'attachment', filename=filename)

答案 2 :(得分:0)

您可以添加要跳过的关键字:

public static string ToSentence(string input)
{
   var list = new List<char>();
    for (var i = 0; i < input.ToCharArray().Length; i++)
    {
            if(input.IndexOf("IDE",i,input.Length-i)==i){
                list.AddRange(" IDE");
                i+=2; 
            }
            else{
                var c = input.ToCharArray()[i];
                foreach (char c1 in i > 0 && char.IsUpper(c) ? new[] {' ', c} : new[] {c})
                list.Add(c1);
            }
     }
    return new string(list.ToArray());
}

观看here

答案 3 :(得分:0)

这适用于您的示例,如果您的方法名称中包含数字,则必须进行调整

using System.Text.RegularExpressions;
public static string GetNiceName(string testString)
{
    var pattern = "([A-Z][a-z]+)|([A-Z]+)";
    var result = new List<string>();
    foreach (Match m in Regex.Matches(testString, pattern))
    {
        result.Add(m.Groups[0].Value);
    }
    return string.Join(" ", result);
}