正则表达式.火柴是跳过火柴?c#
本文关键字:火柴 过火 正则表达式 | 更新日期: 2023-09-27 18:05:45
我需要识别在字符串中找到的子字符串,例如:
"CityABCProcess Test"或"CityABCProcess Test"
to yield:
["城市/城市","ABC", "流程","测试"]
- 子字符串中的第一个字符串可以是小写或大写
- 在找到小写字母或空格之前,任何包含重复大写字母的子字符串都将是子字符串"ABCProcess -> ABC, ABCProcess -> 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
}
这里的问题是它不匹配'X',而只匹配'999'。什么好主意吗?我用regexr.com测试了它,它说这个正则表达式应该匹配两个子字符串。
'b
在c#字符串中被解释为转义序列('u0008, backspace)。
转义斜杠(即''b
),或使用使用@
符号的逐字字符串:
builder.Append(@"[A-Z][a-z]+|([A-Z]|[0-9])+'b|[A-Z]+(?=[A-Z])|([a-z]|[0-9])+");