我想转换PascalCase属性名称,例如Is24Hour,Is512以JSON风格的小写用下划线(即is_24_hour,is_512使用C#).
到目前为止,我已经走远了,但它不适用于多个数字.
([A-Z])([A-Z0-9][a-z])|([a-z0-9])([A-Z0-9])
Run Code Online (Sandbox Code Playgroud)
用替换表达式($1$3_$2$4)
例如"Is24Hour"变成"Is_24_Hour"(然后是低位的.ToLower()).但"Is512"变成了"Is_51_2".
将String.ToLower用于小写.
对于正则表达式,以下似乎有效:
((?<=.)[A-Z][a-zA-Z]*)|((?<=[a-zA-Z])\d+)
Run Code Online (Sandbox Code Playgroud)
结合替换表达式:
_$1$2
Run Code Online (Sandbox Code Playgroud)
这是一个完整的示例:
string strRegex = @"((?<=.)[A-Z][a-zA-Z]*)|((?<=[a-zA-Z])\d+)";
Regex myRegex = new Regex(strRegex, RegexOptions.Multiline);
string strTargetString = @"Is24Hour" + "\n" +
@"Is512" + "\n" + @"A12Hour4" + "\n" +
@"23AHourDay12" + "\n" + @"An8DAY512";
string strReplace = @"_$1$2";
return myRegex.Replace(strTargetString, strReplace).ToLower();
Run Code Online (Sandbox Code Playgroud)