我正在尝试使用RegEx.Replace将字符串转换为帕斯卡命名法。使用正则表达式不是必需的,但我认为这可能会更容易。以下是我要转换的一些示例测试用例:
simple simon says => SimpleSimonSays
SIMPLE SIMON SaYs => SimpleSimonSays
simple_simon_says => SimpleSimonSays
simple simon says => SimpleSimonSays
simpleSimonSays => SimpleSimonSays
simple___simon___ says => SimpleSimonSays
我目前使用的方法不使用正则表达式,在上述5个例子中有4个可以正确处理:
internal static string GetPascalCaseName(string name)
{
string s = System.Globalization.CultureInfo.CurrentCulture.
TextInfo.ToTitleCase(name.ToLower()).Replace(" ", "").Replace("_", "");
return s;
}
其中一个失败的例子是
simpleSimonSays
。目前它返回的是 Simplesimonsays
而不是 SimpleSimonSays
。我该如何在所有4种情况下使其正常工作呢?
编辑
因此,如果单词之间有空格或下划线,或者达到大写字符时,它们将被区分。多个空格和/或多个下划线应视为一个。基本上,空格和下划线应该被忽略,并被用作下一个字母应该是一个大写字母的信号。像这样:simple_____simon___ says => SimpleSimonSays
simpleSimonSays
这样的单词来说,并不存在分割大小写字母的边界。所以,除非您正在使用自然语言处理技术,否则正则表达式无法做到这一点。 - user557597\b([^\W_]+)(?:[ _]*([^\W_]+))*\b
并在委托回调中使用捕获集合。 - user557597pkrltUdrXywaT
。 - user557597"pkrltUdrXywaT"
应该变成"PkrltUdrXywaT"
。 - Icemanind