使用RegEx将字符串大写和小写

Rud*_*ppa 1 .net c# regex

我试图根据索引将字符串转换为大写和小写.

我的字符串是一个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用小写替换大写,反之亦然.

Wik*_*żew 5

.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字母
  • $ - 字符串结尾.

  • 我怀疑Regex是否比单个字符串替换更快? (2认同)