我需要识别字符串中的子字符串,例如:
“CityABCProcess测试”或“cityABCProcess测试”
产量:[“城市/城市”,“ABC”,“过程”,“测试”]
这可以由正则表达式处理吗?或者我应该将我的字符串转换为字符数组并使用一些索引逻辑手动检查这些情况。 lambda解决方案能在这里工作吗?最好的方法是什么?
答案 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);
}