当它是大写字母时分隔对象字符串c# [重复]

Posted

技术标签:

【中文标题】当它是大写字母时分隔对象字符串c# [重复]【英文标题】:Separate object string when it's an uppercase letter c# [duplicate] 【发布时间】:2020-12-27 03:20:16 【问题描述】:

我是一个新开发者,这是我第一次使用winform,另外我正在接手别人的项目,所以有些事情我不完全理解。

我显示了一个“要修改的项目”下拉列表,并且这个列表是这样制作的:“public DisplayItem HorseName get; set;”,所以我的下拉列表中的术语是这样显示的,我想将它们分开当有大写示例时变为 2:马名。我不知道我是否应该进行拆分或 Regex.Replace,尤其是在哪里进行,因为它是经过 2-3 个位置的“要修改的项目”列表。我的客人会在请求中的 k.Name 之后,但它不起作用。

正如我告诉你的起始代码不是我的,所以放置它的地方让我感到困惑

这是我的代码:

[NonSerialized]
        public static Dictionary<string, PropertyInfo> DisplayItemProperties;

    static DisplaySettings()
    
        DisplayItemProperties = (from p in typeof(DisplaySettings).GetProperties()
                                 where p.PropertyType == typeof(DisplayItem)
                                 select p).ToDictionary(k => k.Name, v => v);
    

    public IEnumerable<DisplayItem> DisplayItems()
    
        return DisplayItemProperties.Select(item => item.Value.GetValue(this, null)).Cast<DisplayItem>();
    

this.cbDisplaySetting.Items.AddRange(DisplaySettings.DisplayItemProperties.Keys.Cast().ToArray());

解决方案:

这个:

this.cbDisplaySetting.Items.AddRange(DisplaySettings.DisplayItemProperties.Keys.Cast<object>().ToArray());

成为:

        List<string> itemsLst = DisplaySettings.DisplayItemProperties.Keys.ToList<string>();
        for(var i = 0; i < itemsLst.Count; i++)
        
            itemsLst[i] = Regex.Replace(itemsLst[i], "(\\B[A-Z])", " $1");
        

        this.cbDisplaySetting.Items.AddRange(itemsLst.Cast<object>().ToArray());

【问题讨论】:

你在哪里尝试? 尝试以下操作:string input = "HelloWorld";字符串模式 = "(?'first'[A-Z][a-z]+)(?'second'[A-Z][a-z]+)";字符串输出 = Regex.Replace(input, pattern, "$first $second"); @AluanHaddad 我编辑我的帖子 您发布的代码中没有一个包含对Split() 的调用,没关系它是否有用minimal reproducible example。也就是说,如果您想使用正则表达式来拆分字符串,为什么要调用string.Split() 而不是Regex.Split()?请改进问题。 参见例如***.com/questions/7825496/regex-split-a-string 【参考方案1】:

需要正则表达式吗?这是 linq。

编辑:添加了一个正则表达式选项,因为这是请求的。

([a-z])([A-Z])", "$1 $2") 匹配小写字母,然后匹配大写字母,并将匹配项分别返回为 $1 和 $2,中间有一个空格。

注意:如果您有像 É 这样的重音字符,这将不起作用,您的情况需要吗?

    string input = "HelloWorldHowAreYouToday";
    string output = string.Concat(input.Select(x => Char.IsUpper(x) ? " " + x : x.ToString())).TrimStart(' ');
    Console.WriteLine(output);
    
    //regex example.
    string regExResult = Regex.Replace(input, @"([a-z])([A-Z])", "$1 $2");
    Console.WriteLine(regExResult);

两者的输出:Hello World How Are You Today

【讨论】:

你把string.Concat....放在我的代码中的什么地方?

以上是关于当它是大写字母时分隔对象字符串c# [重复]的主要内容,如果未能解决你的问题,请参考以下文章

python:当它是数字列表时对字符串列表进行排序[重复]

Matlab字符串拆分当它是一个字符串对象

按字符串属性C#对对象列表进行排序[重复]

如何在 C# 中将字符串的每三个字母大写?

在 C# 中分隔字符串中的数字和单位

无法将字符限制为 iOS 中 UITextField 内的字母数字 [重复]