如何使用相应的pascal案例版本替换全部大写字符串?例如,如果我有这些字符串:
SOMETHING_COOL SOMETHING_LESS_COOL WHATEV
我想要这个输出:
SomethingCool SomethingLessCool Whatev
我用正则表达式做到了这一点:
^*public\s[\w-]+?(\?)?\s[A-Z]+?(_[A-Z]+)?(_[A-Z]+)? { get; set; }
...我认为我所需要的所有情况都适用。真正的问题是如何用相应的pascal情况替换匹配。
编辑:我将使用.NET / C#查看文件
答案 0 :(得分:1)
对于标识符的pascal大小写,一旦匹配它,就可以使用另一个正则表达式。
我已经更改了原始正则表达式,因此它使用向前看和向后看只捕获标识符作为匹配
此代码使用您的时髦命名方案获取一些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("_","")));
虽然这会改变声明,但它不会替换使用这些属性的任何代码。所以你将得到一些清理工作。可能有趣的是看你是否可以编写视觉工作室脚本来“重命名”重构。
答案 1 :(得分:0)
在字符串变量中有标识符,请尝试following:
var parts = identifier.Split('_');
var pascalCasedParts = parts.Select(p => p[0] +
new string(p.ToLower().Skip(1).ToArray()));
var pascalIdent = string.Join("", pascalCasedParts.ToArray());