c# - 查找字符串中的所有子字符串c#(正则表达式,字符数组?)

标签 c# arrays regex string parsing

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

“CityABCProcess 测试”或“cityABCProcess 测试”

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

  1. 子字符串中的第一个字符串可以是小写或大写
  2. 任何重复出现大写字母的子字符串都将是子字符串,直到找到小写字母或空格“ABCProcess -> ABC, ABC Process -> ABC”
  3. 如果有一个大写字母后跟一个小写字母,则子字符串将是直到下一个大写字母为止的所有内容。

这可以通过正则表达式处理吗?或者我应该将字符串转换为字符数组并使用一些索引逻辑手动检查这些情况。 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/

相关文章:

c - 返回到 C 中 for 循环的开头

c - 有没有办法在 C 中打印 char 指针数组指向的字符串?

java - 如何将 ArrayAdapter 添加到 ArrayList<ArrayList<String>>()?

c# - 如何减少 .NET 字符串密集型应用程序的内存占用?

c# - 将 switch 语句映射到数据类

python - 使用正则表达式匹配直到某个模式

C# 正则表达式包含 []

python - 如何从字符串中删除所有 IRC 颜色代码

c# - 从同步方法调用异步方法

c# - 如何在 C# 中应用重命名方法来更改带有 get/set 的名称?