查找字符串中的所有子字符串c#(Regex,Char Array?)

时间:2015-07-17 15:28:25

标签: c# arrays regex string parsing

我需要识别字符串中的子字符串,例如:

“CityABCProcess测试”或“cityABCProcess测试”

产量:[“城市/城市”,“ABC”,“过程”,“测试”]

  1. 子字符串中的第一个字符串可以是小写或大写
  2. 任何带有重复大写字母的子字符串都将是一个子字符串,直到找到小写字母或空格“ABCProcess - > ABC,ABC Process - > ABC”
  3. 如果有一个大写字母后跟一个小写字母,子字符串将是下一个大写字母的所有内容。
  4. 这可以由正则表达式处理吗?或者我应该将我的字符串转换为字符数组并使用一些索引逻辑手动检查这些情况。 lambda解决方案能在这里工作吗?最好的方法是什么?

1 个答案:

答案 0 :(得分:3)

不要理会反对者!即使是这样的事情,RegEx也不是那么复杂。我相信这种模式可以解决问题:

  

[A-Z] [A-Z] + | [A-Z] + \ C | [A-Z] +(= [A-Z])| [A-Z] +

请参阅here进行工作演示。它只是按顺序处理的一堆OR。这是细分:

  • [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);
    }