代码之家  ›  专栏  ›  技术社区  ›  Alan Wayne

如何删除额外的空格、特殊字符并使字符串小写?

  •  0
  • Alan Wayne  · 技术社区  · 3 年前

    我对正则表达式(C#)很不在行,所以我把事情分解成几个部分。以下一系列正则表达式语句的目标是获取任意字符串,并将其简化为“this is a test of 4mg/cc susp”格式的小写形式。

    这就是我一直在做的:

    // Test string
    string str1 = @"     This is\ 'a'   test   of 4mg/cc susp  ";
    
    // Remove special characters except for space and /
    str1 = Regex.Replace(str1, @"[^0-9a-zA-Z /]+", "");
    
    // Remove all but one space from within the string. Trim the ends.
    str1 = Regex.Replace(str1.Trim(), @"\s+", " ");
    
    // Convert all to lower case
    str1 = str1.ToLower();
    

    有没有一个正则表达式(C#)语句可以完成上述所有任务?

    1 回复  |  直到 3 年前
        1
  •  1
  •   41686d6564    3 年前

    我认为,试图将这两种模式结合成一种模式会降低可读性。你可以继续打两个电话 Regex.Replace() 只需附加 .ToLower() 对于第二个:

    // Remove special characters except for space and /
    str1 = Regex.Replace(str1, @"[^0-9a-zA-Z /]+", "");
    
    // Remove all but one space, trim the ends, and convert to lower case.
    str1 = Regex.Replace(str1.Trim(), @"\s+", " ").ToLower();
    //                                             ^^^^^^^^^
    

    也就是说,如果你真的需要使用一行程序,你可以这样写:

    str1 = Regex.Replace(str1, @"[^A-Za-z0-9 /]+|( )+", "$1").Trim().ToLower();
    

    这将匹配否定字符类中不存在的任何字符 一个或多个空格字符,将空格字符放在捕获组中,并将每个匹配项替换为组1中捕获的内容(即,无空格字符或单个空格字符)。

    为了完整起见,如果您还想使用正则表达式处理修剪 (并使模式更不可读) ,你可以:

    str1 = Regex.Replace(str1, @"[^A-Za-z0-9 /]+|^ +| +$|( )+", "$1").ToLower();