我需要识别字符串中找到的子字符串,例如:
“CityABCProcess 测试”或“cityABCProcess 测试”
产量:[“城市/城市”,“ABC”,“过程”,“测试”]
- 子字符串中的第一个字符串可以是小写或大写
- 任何重复出现大写字母的子字符串都将是子字符串,直到找到小写字母或空格“ABCProcess -> ABC, ABC Process -> ABC”
- 如果有一个大写字母后跟一个小写字母,则子字符串将是直到下一个大写字母为止的所有内容。
这可以通过正则表达式处理吗?或者我应该将字符串转换为字符数组并使用一些索引逻辑手动检查这些情况。 lambda 解决方案在这里可行吗?解决这个问题的最佳方法是什么?
最佳答案
不要理会那些反对者!即使是这样的事情对于 RegEx 来说也并不那么复杂。我相信这种模式应该可以解决问题:
[A-Z][a-z]+|[A-Z]+\b|[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);
}
关于c# - 查找字符串中的所有子字符串c#(正则表达式,字符数组?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31479358/