Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C在处理字符串时使用regexp_C#_Regex - Fatal编程技术网

C# C在处理字符串时使用regexp

C# C在处理字符串时使用regexp,c#,regex,C#,Regex,我有一个格式为string1的字符串;第2条;第三条;。。。;斯特林 ; 作为分隔符 我需要删除一些我知道的字符串值,比如valueForDelete 我使用string.Split';'方法查找我的值,将其删除,然后创建一个没有删除值的新字符串。 我想知道使用regex是否可以简化此过程?为什么不: string s = "string1;string2;string3;valueForDelete;string4" s = s.Replace("valueForDelete;", strin

我有一个格式为string1的字符串;第2条;第三条;。。。;斯特林 ; 作为分隔符 我需要删除一些我知道的字符串值,比如valueForDelete 我使用string.Split';'方法查找我的值,将其删除,然后创建一个没有删除值的新字符串。 我想知道使用regex是否可以简化此过程?

为什么不:

string s = "string1;string2;string3;valueForDelete;string4"
s = s.Replace("valueForDelete;", string.Empty).Replace("valueForDelete", string.Empty);
如果该值是最后一个值,则第二次替换适用。

为什么不:

string s = "string1;string2;string3;valueForDelete;string4"
s = s.Replace("valueForDelete;", string.Empty).Replace("valueForDelete", string.Empty);
第二个替换是针对值是否为最后一个值。

您不能直接说吗

 var myString = "string1;string2;string3;string4;string5;";
 myString = myString.Replace("string3;", "");
结果将是一个值为string1的myString;第2条;第4条;第5条

编辑:创建为正则表达式

…目前我看到的唯一缺陷是myString=string3;它导致myString=

你就不能说

 var myString = "string1;string2;string3;string4;string5;";
 myString = myString.Replace("string3;", "");
结果将是一个值为string1的myString;第2条;第4条;第5条

编辑:创建为正则表达式

…目前我看到的唯一缺陷是myString=string3;它导致myString=

使用此正则表达式查找valueForDelete:?使用此正则表达式查找valueForDelete:?进行替换,确保使用LINQ不会影响其他数据:

对于简单的更换,请使用:

对于更换,确保使用LINQ不会影响其他数据:

对于简单的更换,请使用:

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

    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"
Regex是一个有用的工具,可以用于此目的,但通常很难维护。类似于上面的内容可能会提供一个更易于维护的解决方案。如果字符串还包含正则表达式字符,则正则表达式可能会很棘手。作为奖励,这很容易扩展

    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"

无论使用正则表达式有多大可能,使用拆分和联接将是您最简单、最实用的选择。如果有更复杂的方法选择要删除的字符串,可以使用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);

如果只是删除一个比字符串更精确的值,则“替换”会更好。

无论正则表达式如何,使用拆分和联接将是最简单、最实用的选择。如果有更复杂的方法选择要删除的字符串,可以使用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);

如果只是删除一个比字符串更精确的值,则“替换”会更好。

正则表达式可以做到这一点,但不确定对于您要求的内容,它是否会更快。分裂很快。如果你在更复杂的东西上吐痰,那么你就必须使用正则表达式。我假设您正在使用StringBuilder构建新字符串?字符串+=速度很慢。当您新建StringBuilder时,请将其设置为您期望的大小。

正则表达式可以做到这一点,但不确定对于您要求的内容,它是否会更快。分裂很快。如果你在更复杂的东西上吐痰,那么你就必须使用正则表达式。我假设您正在使用StringBuilder构建新字符串?字符串+=速度很慢。新建StringBuilder时,请将其设置为您期望的大小。

为什么不能这样做

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

你为什么不能这么做

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


听起来不象任何字符串。Replace无法执行。听起来不象任何字符串。Replace无法执行。如果列表中的其他字符串之一以string3结尾,但不等于string3;,它将受到此代码的影响。如果string3是列表中的最后一个字符串,则此操作无效。如果列表中的其他字符串之一以string3结尾,但不等于string3;,它将受到此代码的影响。如果string3是列表中的最后一个字符串,则此操作无效。如果列表中的其他字符串之一包含但不等于valueForDelete,则它将受到此代码的影响。此外,这将导致空值;第1条;第2条;第三条;;斯特林;如果列表中的其他字符串之一包含但不等于valueForDelete,则它将受到此代码的影响。此外,这将导致空值;第1条;第2条;第三条;;斯特林;如果列表中的其他字符串之一包含但不等于valueForDelete,则它将受到此代码的影响;valueForDelete;,如果它是字符串中的第一个字符串,则使用另一个特殊情况。@Ken如果我不想使用,如果它没有帮助,则如果列表中的其他字符串之一包含但不等于valueForDelete,则它将受到此代码的影响。可以尝试类似于;valueForDelete;,如果它是字符串中的第一个,则使用另一个特例。@Ken如果我不想使用if,那么它可能是最优雅的解决方案为什么要在那里使用var?你知道这两个变量都是字符串。过度使用var是危险的。我不喜欢像Strings这样的简单类型,我只是在几乎所有地方使用var。打字系统处理好了,我同意。然而,这是一种风格,理想情况下不应该影响整体解决方案。至少我希望如此
;@科里:var被发明的一个原因正是因为很明显变量应该是什么类型。在这种情况下,很明显,var是一件好事。可能是最优雅的解决方案为什么要在那里使用var?你知道这两个变量都是字符串。过度使用var是危险的。我不喜欢像Strings这样的简单类型,我只是在几乎所有地方使用var。打字系统处理好了,我同意。然而,这是一种风格,理想情况下不应该影响整体解决方案。至少我希望@科里:var被发明的一个原因正是因为很明显变量应该是什么类型。在这种情况下,很明显,var是一件好事。我喜欢Travis提出的解决方案。如果它是一个非常大的列表,你可以尝试我的方法,因为它跳过了ToArray。但很有可能特拉维斯提出的方法更快。我喜欢特拉维斯提出的解决方案。如果它是一个非常大的列表,你可以尝试我的方法,因为它跳过了ToArray。但特拉维斯提出的方法很有可能更快。