代码之家  ›  专栏  ›  技术社区  ›  Rudresha Parameshappa

使用regex将字符串大小写

  •  1
  • Rudresha Parameshappa  · 技术社区  · 6 年前

    我正在尝试根据索引将字符串转换为大写和小写。

    我的绳子是 LanguageCode 喜欢 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.* 我们可以利用 正则表达式 用小写代替大写,反之亦然。

    1 回复  |  直到 6 年前
        1
  •  5
  •   Wiktor Stribiżew    6 年前

    .NET正则表达式不支持大小写修改运算符。

    你可以用 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 消光剂
    • ^ -字符串的开头
    • ([a-z]{2}) -捕获组1:2个ASCII字母
    • - -连字符
    • ([a-z]{2}) -捕捉组2:2个ascii字母
    • $ -字符串结尾。