大写一切在.NET中的第n个字符之前

时间:2014-12-04 13:42:16

标签: c# .net regex comparison

我需要在第二个之前将所有内容都大写 - 从.NET中字符串的开头。做这个的最好方式是什么?第二个破折号之前的字符串可以是任何东西。一旦完成,我需要一个新的单个字符串。

Tt-Fga - Louisville - Kentucky

TT-FGA - Louisville - Kentucky

4 个答案:

答案 0 :(得分:2)

这应该可以为您的具体案例完成工作:

public static string ToUpperUntilSecondHyphen(string text)
{
    int index = text.IndexOf('-', text.IndexOf('-') + 1);
    return text.Substring(0, index).ToUpper() + text.Substring(index);
}

更通用的方法可能如下所示:

public static string ToUpperUntilNthOccurrenceOfChar(string text, char c, int occurrences)
{
    if (occurrences > text.Count(x => x == c))
    {
        return text.ToUpper();
    }

    int index = 0;
    for (int i = 0; i < occurrences; i++, index++)
    {
        index = text.IndexOf(c, index);
    }
    return text.Substring(0, index).ToUpper() + text.Substring(index);
}

答案 1 :(得分:1)

  1. 使用IndexOf标识连字符的位置。你必须使用这个函数两次才能找到第一个连字符,然后是第二个连字符。
  2. 构造仅包含Substring的字符的子字符串。构造包含所有剩余字符的子字符串。
  3. 大写第一个字符串ToUpper
  4. 与+运算符连接。

答案 2 :(得分:0)

(.*?-.*)(?=-)

您可以在此处使用替换。使用$1.upper()c#中提供的内容替换。

http://regex101.com/r/yR3mM3/50

答案 3 :(得分:0)

我继续前进并做到了这一点。如果有更好的答案,请告诉我。

 var parts = @event.EventParent.Name.Split(new[] {'-'}, StringSplitOptions.RemoveEmptyEntries);

                    for (int i = 0; i < parts.Length; i++)
                    {
                        if (i >= 2)
                            break;

                        parts[i] = parts[i].ToUpper();
                    }
                    @event.EventParent.Name = string.Join("-", parts);