C#在使用字符串时使用正则表达式

时间:2011-08-08 16:31:14

标签: c# regex

我有一个格式为“string1; string2; string3; ...; stringn”的字符串 ;作为分隔符
我需要删除一些我知道的字符串值,比如valueForDelete
我使用string.Split(';')方法查找我的值,删除它然后创建一个没有删除值的新字符串。
我想知道是否可以使用正则表达式轻松完成此过程?

8 个答案:

答案 0 :(得分:4)

var values = "string1;string2;string3;string4";
var cleanedValues = String.Join(";", 
         values.Split(';')
               .Where(x => x != "string3")
               .ToArray())

正则表达式是一个有用的工具,可以用于此,但通常很难维护。像上面这样的东西可能会提供一个更容易维护的解决方案。如果你的字符串也包含正则表达式字符,正则表达式可能会很棘手。作为奖励,这很容易扩展。

    static string CleanItUp(string values, params string[] removeMe)
    {
        return String.Join(";",
                   values.Split(';')
                         .Except(removeMe)
                         .ToArray());
    }

使用像。

var retString = CleanItUp("string1;string2;string3;", "string1", "string2");
// returns "string3"

答案 1 :(得分:1)

为什么不呢:

string s = "string1;string2;string3;valueForDelete;string4"
s = s.Replace("valueForDelete;", string.Empty).Replace("valueForDelete", string.Empty);

如果值是最后一个,则第二个替换。

答案 2 :(得分:0)

难道你不能说

 var myString = "string1;string2;string3;string4;string5;";
 myString = myString.Replace("string3;", "");

结果是myString,其值为"string1;string2;string4;string5;"

编辑:创建为正则表达式

public static Regex regex = new Regex("(?:^|;)string3(;|$)", 
    RegexOptions.CultureInvariant | RegexOptions.Compiled
    );

 myString = regex.Replace(myString, ";");

...我目前看到的唯一缺陷是myString = "string3";会导致myString = ";";

答案 3 :(得分:0)

使用此正则表达式查找valueForDelete(?<=;|^)valueForDelete(?=;|$)

const string Pattern = @"(?<=;|^)string3(?=;|$)";    
var s = "string1;string2;string3;string4;string5;";    
var res = Regex.Replace(s, Pattern, string.Empty);

答案 4 :(得分:0)

对于替换,确保没有其他数据受到影响(使用LINQ):

 string test = "string1;string2;string3;valueForDelete;stringn";
 test = String.Join(";", test.Split(';').Where(s => s != "valueForDelete"));

简单替换(使用String.Replace()):

string test = "string1;string2;string3;valueForDelete;stringn";
test = test.Replace("valueForDelete;", "");

答案 5 :(得分:0)

然而,使用RegEx,使用Split和Join可能是最简单,最实用的选择。如果你有一个更复杂的方法来选择要删除的字符串,你可以使用Where子句。

String input = "string1;string2;string3";
String valueForDelete = "string2";
String[] parts = input.Split(';');
var allowed = parts.Where(str => !str.Equals(valueForDelete));
String output = String.Join(";", allowed);

如果您只是删除精确值而不是String.Replace会更好。

答案 6 :(得分:0)

正则表达式会做到这一点,但不确定你问的问题会更快。 .Split很快。如果你在更复杂的东西上随地吐痰,你就必须使用正则表达式。我假设你使用StringBuilder来构建新的字符串? String + =很慢。当您新建StringBuilder时,请将其设置为您期望的大小。

答案 7 :(得分:0)

为什么你不能这样做?

        public static string Replace(string input)
        {
            input = input.Replace("valueToDelete;", "");
            return input ;
        }