正则表达式.火柴是跳过火柴?c#

本文关键字:火柴 过火 正则表达式 | 更新日期: 2023-09-27 18:05:45

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

"CityABCProcess Test"或"CityABCProcess Test"

to yield:

["城市/城市","ABC", "流程","测试"]

  1. 子字符串中的第一个字符串可以是小写或大写
  2. 在找到小写字母或空格之前,任何包含重复大写字母的子字符串都将是子字符串"ABCProcess -> ABC, ABCProcess -> ABC"
  3. 如果有一个大写字母后面跟着一个小写字母,子字符串将是所有内容,直到下一个大写字母。

我们使用的正则表达式是:

" [a - z] [a - z] + | ([a - z] | [0 - 9] + ' b | [a - z] + (? = [a - z]) | ([a - z] | [0 - 9]) + "

这一直工作得很好,但在字符串的情况下中断:

" x - 999 "

我们以这种方式实现它:

        StringBuilder builder = new StringBuilder();
        builder.Append("[A-Z][a-z]+|([A-Z]|[0-9])+'b|[A-Z]+(?=[A-Z])|([a-z]|[0-9])+");
        foreach (Match match in Regex.Matches(name, builder.ToString()))
        {
            //do things with each match
        }

这里的问题是它不匹配'X',而只匹配'999'。什么好主意吗?我用regexr.com测试了它,它说这个正则表达式应该匹配两个子字符串。

正则表达式.火柴是跳过火柴?c#

'b在c#字符串中被解释为转义序列('u0008, backspace)。

转义斜杠(即''b),或使用使用@符号的逐字字符串:

        builder.Append(@"[A-Z][a-z]+|([A-Z]|[0-9])+'b|[A-Z]+(?=[A-Z])|([a-z]|[0-9])+");