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