当它是大写字母时分隔对象字符串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# [重复]的主要内容,如果未能解决你的问题,请参考以下文章