2

如何用相应的帕斯卡大小写版本替换全大写字符串?例如,如果我有这些字符串:

SOMETHING_COOL SOMETHING_LESS_COOL WHATEV

我想要这个输出:

SomeCoolSomethingLessCoolWhatev

我用正则表达式做到了这一点:

^*public\s[\w-]+?(\?)?\s[A-Z]+?(_[A-Z]+)?(_[A-Z]+)? { get; set; }

...我认为适用于我需要的所有情况。真正的问题是如何用相应的帕斯卡大小写替换匹配项。

编辑:我将使用 .NET/C# 查看文件

4

2 回答 2

1

一旦匹配了标识符的帕斯卡大小写,就可以使用另一个正则表达式。

我已经更改了您的原始正则表达式,因此它使用向前和向后仅捕获标识符作为匹配项

此代码使用您的时髦命名方案获取一些 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 脚本来执行“重命名”重构可能会很有趣。

于 2013-06-20T22:44:46.697 回答
0

在字符串变量中有标识符,请尝试以下操作

var parts = identifier.Split('_');
var pascalCasedParts = parts.Select(p => p[0] +
                           new string(p.ToLower().Skip(1).ToArray()));
var pascalIdent = string.Join("", pascalCasedParts.ToArray());
于 2013-06-20T22:50:45.477 回答