如何删除多余的空格、特殊字符并使字符串小写



我在Regex(C#(方面做得很差,所以我把事情分解成几个部分。以下一系列Regex语句的目标是获取任意字符串,并将其简化为格式"的小写;这是4mg/cc悬浮液的测试;。

这就是我一直在做的事情:

// 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();

是否有一个单一的Regex(C#(语句可以完成以上所有内容?

我认为,试图将两种模式合并为一种模式会降低可读性。您可以继续使用对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中捕获的字符(即,无字符或单个空格字符(。

为了完整起见,如果您还想用regex处理修剪(并使模式的可读性更低(,您可以:

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

最新更新