我试图根据索引将字符串转换为大写和小写.
我的字符串是一个LanguageCode喜欢cc-CC在那里cc是语言代码,CC是国家代码.用户可以输入任何格式,如"cC-Cc".我使用正则表达式来匹配数据是否是格式cc-CC.
var regex = new Regex("^[a-z]{2}-[A-Z]{2}$", RegexOptions.IgnoreCase);
//I can use CultureInfos from .net framework and compare it's valid or not.
//But the requirement is it should allow invalid language codes also as long
//The enterd code is cc-CC format
Run Code Online (Sandbox Code Playgroud)
现在,当用户输入的内容cC-Cc我正在尝试lowercase前两个字符,然后是uppercase最后两个字符.
我可以使用分割字符串-然后连接它们.
var languageDetails = languageCode.Split('-');
var languageCodeUpdated = $"{languageDetails[0].ToLowerInvariant()}-{languageDetails[1].ToUpperInvariant()}";
Run Code Online (Sandbox Code Playgroud)
我想我可以避免多个字符串创建,并相应地使用RegEx大写和小写.
在搜索相同内容时,我发现了一些使用的解决方案\L,\U但我无法将它们用作C#显示错误的编译器.此外,RegEx.Replace()还有一个MatchEvaluator我无法理解的参数或委托 .
C#我们可以用任何方法RegEx用小写替换大写,反之亦然.
.NET regex不支持大小写修改操作符.
你可以使用MatchEvaluator:
var result = Regex.Replace(s, @"(?i)^([a-z]{2})-([a-z]{2})$", m =>
$"{m.Groups[1].Value.ToLower()}-{m.Groups[2].Value.ToUpper()}");
Run Code Online (Sandbox Code Playgroud)
请参阅C#演示.
细节
(?i)- RegexOptions.IgnoreCasemopdiofier 的内联版本^ - 字符串的开头([a-z]{2}) - 捕获组#1:2个ASCII字母- - 连字符([a-z]{2}) - 捕获组#2:2个ASCII字母$ - 字符串结尾.| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |