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

时间:2018-05-30 09:43:30

标签: c# .net 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

现在,当用户输入cC-Cc时,我正在尝试lowercase前两个字符,然后uppercase最后两个字符。

我可以使用-拆分字符串,然后将它们连接起来。

var languageDetails = languageCode.Split('-');
var languageCodeUpdated = $"{languageDetails[0].ToLowerInvariant()}-{languageDetails[1].ToUpperInvariant()}";

我认为可以避免多个字符串创建,并相应地使用RegEx本身大写和小写。

在搜索相同内容时,我发现了一些使用\L\U的解决方案,但我无法将它们用作显示错误的C#编译器。另外,RegEx.Replace()有一个我无法理解的参数或委托MatchEvaluator

C#中是否有任何方法我们可以使用RegEx将小写替换为小写,反之亦然。

1 个答案:

答案 0 :(得分: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()}");

请参阅C# demo

<强>详情

  • (?i) - RegexOptions.IgnoreCase mopdiofier
  • 的内联版本
  • ^ - 字符串的开头
  • ([a-z]{2}) - 捕获组#1:2个ASCII字母
  • - - 连字符
  • ([a-z]{2}) - 捕获第2组:2个ASCII字母
  • $ - 字符串结束。