我正在尝试根据索引将字符串转换为大写和小写。
我的字符串是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
将小写替换为小写,反之亦然。
答案 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字母$
- 字符串结束。