2 回答
TA贡献1830条经验 获得超9个赞
您可以匹配前缀和后缀之间的空位置来拆分驼峰式标识符
(?<=[_a-z])(?=[_A-Z])
前缀包含小写字母,后缀包含大写字母。
如果要匹配 camelCase 标识符,可以使用
(?<=^|[^_a-zA-Z])_*[a-z]+[_a-zA-Z]*
怎么运行的:
(?<= Match any position pos following a prefix exp (?<=exp)pos
^ Beginning of line
| OR
[^_a-zA-Z] Not an identifier character
)
_* Any number of underlines
[a-z]+ At least one lower case letter
[_a-zA-Z]* Any number of underlines and lower or upper case letters
所以,它基本上说:匹配一个序列,可选地以下划线开头,后跟至少一个小写字母,可选地后跟下划线和字母(大写和小写),并且整个内容必须以行首或开头非标识符字符。这对于确保我们不仅匹配以大写字母(或下划线和大写字母)开头的标识符的结尾是必要的。
var camelCaseExpr = new Regex("(?<=^|[^_a-zA-Z])_*[a-z]+[_a-zA-Z]*");
MatchCollection matches = camelCaseExpr.Matches("whatIf _Abc _abc howFar");
foreach (Match m in matches) {
Console.WriteLine(m.Value);
}
印刷
whatIf
_abc
howFar
TA贡献1862条经验 获得超7个赞
今天遇到了同样的问题,对我有用的是:
\b([a-z][a-z0-9]+[A-Z])+[a-z0-9]+\b
注意:这是用于 PCRE 正则表达式
解释:
`(` group begin
`[a-z]` start with a lower-case letter
`[a-z0-9]+` match a string of all lowercase/numbers
`[A-Z]` an upper-case letter
`)+` group end; match one or more of such groups.
以更多的小写/数字结尾。 \b用于单词边界。
就我而言,_camelCaseIdent_s 单词之间只有一个大写字母。所以,这对我有用,但如果你可以有(或想要匹配)多个大写字母之间,你可以做类似的事情[A-Z]{1,2}
- 2 回答
- 0 关注
- 258 浏览
添加回答
举报