查找字符串c#(正则表达式,字符数组?)中的所有子字符串
我需要识别字符串中的子字符串,例如: “CityABC过程测试”或“CityABC过程测试” 产生:[“城市/城市”、“ABC”、“过程”、“测试”]查找字符串c#(正则表达式,字符数组?)中的所有子字符串,c#,arrays,regex,string,parsing,C#,Arrays,Regex,String,Parsing,我需要识别字符串中的子字符串,例如: “CityABC过程测试”或“CityABC过程测试” 产生:[“城市/城市”、“ABC”、“过程”、“测试”] 子字符串中的第一个字符串可以是小写或大写 任何重复出现大写字母的子字符串都将成为子字符串,直到找到小写字母或空格“ABCProcess->ABC,ABCProcess->ABC” 如果有一个大写字母后跟一个小写字母,则在下一个大写字母之前,子字符串将是所有内容 这可以由正则表达式处理吗?或者我应该将字符串转换为字符数组,并使用一些索引逻辑手动检查
这可以由正则表达式处理吗?或者我应该将字符串转换为字符数组,并使用一些索引逻辑手动检查这些大小写。lambda解决方案在这里有效吗?最好的办法是什么?不要理会那些反对者!即使是这样的东西,在正则表达式中也没有那么复杂。我认为这种模式应该起到作用: [A-Z][A-Z]+|[A-Z]+\b|[A-Z]+(?=[A-Z])|[A-Z]+ 请参阅以获取有效的演示。它只是一堆按顺序处理的
或。以下是分类:
[A-Z][A-Z]+
任何以大写字母开头,然后后跟所有小写字母的单词
[A-Z]+\b
-所有大写字母的任何单词(以便包括在以下选项中排除的最后一个大写字母)
[A-Z]+(?=[A-Z])
所有大写字母,但不包括下一个单词的第一个大写字母的任何单词
[a-z]+
-所有小写的单词
例如:
string input = "CityABCProcess TEST";
StringBuilder builder = new StringBuilder();
builder.Append("[A-Z][a-z]+");
builder.Append("|");
builder.Append("[A-Z]+$");
builder.Append("|");
builder.Append("[A-Z]+(?=[A-Z])");
builder.Append("|");
builder.Append("[a-z]+");
foreach (Match m in Regex.Matches(input, builder.ToString()))
{
Console.WriteLine(m.Value);
}
这在很大程度上取决于您的意见,但IMO在有疑问时,不要使用正则表达式。它可能更快(如果速度是一个巨大的问题,那么它可能值得考虑),但保持它通常是一件令人头痛的事。“\\p{Lu}+”将是您正则表达式的起点。。。但手工编写代码可能会更容易。(请注意,字符串已经是可索引的字符序列)。。。可能会有帮助。实现一个方法,在for循环中循环所有字符
,并填充StringBuilder
@user2366842:在大多数情况下,regex是最慢的选项。可以确认,@Stevendogart是:-)这太接近了!谢谢你的回复。我正在使用测试它,我发现它在这种情况下不起作用:“城市ABC过程”它只得到“AB”而不是“ABC”还漏掉了数字“过程1”显示了类似的东西。很好。修正了我用\b
而不是$
来纠正这个问题的答案。你可以用([A-Z]|[1-9])
来表示大写,用([A-Z]|[1-9])
来表示小写