一旦匹配了标识符的帕斯卡大小写,就可以使用另一个正则表达式。
我已经更改了您的原始正则表达式,因此它使用向前和向后仅捕获标识符作为匹配项
此代码使用您的时髦命名方案获取一些 C# 代码,并将其替换为带有 pascal 大小写的代码:-
var code = "public class Blah\r\n public int SOMETHING_LESS_COOL { get; set; }\r\n }";
var identifierRegex = new Regex(@"(?<=^\s*public\s[\w-]+?(\?)?\s)[A-Z]+(_[A-Z]+)*(?=\s*\{\s*get;\s*set;\s*\})", RegexOptions.Multiline);
var underscoreRegex = new Regex(@"(_|\s|^)\w");
var pascalCode = identifierRegex.Replace(code,
i => underscoreRegex.Replace(i.Value.ToLower(),
m => m.Value.ToUpper().Replace("_","")));
虽然这会更改声明,但它不会替换任何使用这些属性的代码。所以你会留下相当多的清理工作。看看您是否可以编写 Visual Studio 脚本来执行“重命名”重构可能会很有趣。