C# C在处理字符串时使用regexp
我有一个格式为string1的字符串;第2条;第三条;。。。;斯特林 ; 作为分隔符 我需要删除一些我知道的字符串值,比如valueForDelete 我使用string.Split';'方法查找我的值,将其删除,然后创建一个没有删除值的新字符串。 我想知道使用regex是否可以简化此过程?为什么不: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
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。但特拉维斯提出的方法很有可能更快。