Regex.Matches正在跳过一场比赛? C#

时间:2015-07-30 13:45:09

标签: c# regex string

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

  

" CityABCProcess测试"或" cityABCProcess测试"

产量:

  

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

  1. 子字符串中的第一个字符串可以是小写或大写
  2. 任何带有重复大写字母的子字符串都是子字符串,直到找到小写字母或空格" ABCProcess - > ABC,ABC流程 - > ABC"
  3. 如果有一个大写字母后跟一个小写字母,子字符串将是下一个大写字母的所有内容。
  4. 我们一直使用的正则表达式是:

      

    " [AZ] [AZ] + |([AZ] | [0-9])+ \ C | [AZ] +(?= [AZ])|([AZ] | [O- 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测试了它,它说这个正则表达式应该匹配两个子串。

1 个答案:

答案 0 :(得分:4)

\b被解释为C#字符串中的转义序列(\ u0008,退格键)。

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

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