用大写字母拆分字符串

Nir*_*Nir 46 c# string

可能重复:
正则表达式,按大写字母拆分字符串但忽略TLA

我有一个字符串,它是几个单词的组合,每个单词都是大写的.
例如:SomeWordsString

使用C#,如何以智能方式将字符串拆分为"几个字符串"?

谢谢!

Mic*_*uen 85

使用这个正则表达式(我忘记了我从哪个stackoverflow回答来源,现在将搜索它):

 public static string ToLowercaseNamingConvention(this string s, bool toLowercase)
        {
            if (toLowercase)
            {
                var r = new Regex(@"
                (?<=[A-Z])(?=[A-Z][a-z]) |
                 (?<=[^A-Z])(?=[A-Z]) |
                 (?<=[A-Za-z])(?=[^A-Za-z])", RegexOptions.IgnorePatternWhitespace);

                return r.Replace(s, "_").ToLower();
            }
            else
                return s;
        }
Run Code Online (Sandbox Code Playgroud)

我在这个项目中使用它:http://www.ienablemuch.com/2010/12/intelligent-brownfield-mapping-system.html

[编辑]

我现在找到了:如何将CamelCase转换为Java中的人类可读名称?

很好地拆分"TodayILiveInTheUSAWithSimon","今天"前面没有空格:

using System;
using System.Text.RegularExpressions;

namespace TestSplit
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            Console.WriteLine ("Hello World!");



            var r = new Regex(@"
                (?<=[A-Z])(?=[A-Z][a-z]) |
                 (?<=[^A-Z])(?=[A-Z]) |
                 (?<=[A-Za-z])(?=[^A-Za-z])", RegexOptions.IgnorePatternWhitespace);


            string s = "TodayILiveInTheUSAWithSimon";
            Console.WriteLine( "YYY{0}ZZZ", r.Replace(s, " "));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

 YYYToday I Live In The USA With SimonZZZ
Run Code Online (Sandbox Code Playgroud)


nik*_*ias 61

string[] SplitCamelCase(string source) {
    return Regex.Split(source, @"(?<!^)(?=[A-Z])");
}
Run Code Online (Sandbox Code Playgroud)

样品:

https://dotnetfiddle.net/0DEt5m

  • 好答案.使用`return string.Join("",Regex.Split(value,@"(?<!^)(?= [AZ](?![AZ] | $))"));`如果你不这样做希望大写缩写被拆分. (7认同)

Guf*_*ffa 24

您可以循环遍历字符,并在需要的位置添加空格:

string theString = "SeveralWordsString";

StringBuilder builder = new StringBuilder();
foreach (char c in theString) {
  if (Char.IsUpper(c) && builder.Length > 0) builder.Append(' ');
  builder.Append(c);
}
theString = builder.ToString();
Run Code Online (Sandbox Code Playgroud)


Sta*_*erc 5

    public static IEnumerable<string> SplitOnCapitals(string text)
    {
        Regex regex = new Regex(@"\p{Lu}\p{Ll}*");
        foreach (Match match in regex.Matches(text))
        {
            yield return match.Value;    
        }
    }
Run Code Online (Sandbox Code Playgroud)

这将正确处理Unicode.