我需要识别字符串中的子字符串,例如:
"CityABCProcess Test" 或者 "cityABCProcess Test"
应该返回:
[ "City/city", "ABC", "Process", "Test" ]
- 子字符串中的第一个字符串可以是小写或大写字母。
- 任何包含重复大写字母的子字符串都是一个子字符串,直到找到小写字母或空格为止。例如:"ABCProcess" -> "ABC","ABC Process" -> "ABC"。
- 如果有一个大写字母后跟着一个小写字母,则子字符串将是直到下一个大写字母之前的所有内容。
我们一直在使用以下正则表达式:
"[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
}
这里的问题是它只匹配了“999”,而没有匹配“X”。有什么想法吗?我在regexr.com上测试了一下,它说这个正则表达式应该能够匹配这两个子字符串。
-
,尝试使用[A-Z][a-z]+|([A-Z]|[-0-9])+\b|[A-Z]+(?=[A-Z])|([a-z]|[0-9])+
。 - m.cekiera