C# 如何替换其中任何一个“/\”[]:|<&燃气轮机+;=*&引用;asp.net中包含空字符串的字符串中的字符
我想用asp.net c中的空字符串替换以下字符串中出现的任何字符# “/\[]:|<>+=;,?*” 我正试图用一个新的名字来代替它C# 如何替换其中任何一个“/\”[]:|<&燃气轮机+;=*&引用;asp.net中包含空字符串的字符串中的字符,c#,asp.net,sharepoint,C#,Asp.net,Sharepoint,我想用asp.net c中的空字符串替换以下字符串中出现的任何字符# “/\[]:|+=;,?*” 我正试图用一个新的名字来代替它 mystring.contains('[') { mystring.Replace('[',' '); } 目前我正在做如上所述。 有没有更干净的方法。 感谢并问候您可以使用一个简单的循环,无需首先检查它是否包含: foreach(char c in @"/\[]:|<>+=;,?*") mystring = mystring.Repla
mystring.contains('[')
{
mystring.Replace('[',' ');
}
目前我正在做如上所述。
有没有更干净的方法。
感谢并问候您可以使用一个简单的循环,无需首先检查它是否包含:
foreach(char c in @"/\[]:|<>+=;,?*")
mystring = mystring.Replace(c, ' ');
StringBuilder
不一定在CPU周期方面性能更好,但在内存消耗方面性能更好,因为它并不总是创建新实例。您可以使用@ThreeFx提到的正则表达式。另一个技巧是拆分字符串,然后重新连接:
var toBeRemoved = new char[] { '[', ']', '/', '\\', ':', '|', '<', '>', '+', '=', ';', ',', '?', '*' };
mystring = string.Join(string.Empty, mystring.Split(toBeRemoved));
var-toBeRemoved=new char[]{'[',']','/','\\',':','|',''+','=',';',','?','*';
mystring=string.Join(string.Empty,mystring.Split(toBeRemoved));
有很多方法:
1) 通过正则表达式:
var pattern = @"[\/\\[\]\:\|\<>\+\=\;\,\?\*]";
var sample = "test * beacuse [a]";
var result = Regex.Replace(sample,
pattern,
string.Empty,
RegexOptions.CultureInvariant);
这些方法只是示例;) 如果您经常需要从字符串中删除字符,可以编写一个简单的扩展方法,如下所示:
public static class StringExt
{
public static string Remove(this string self, params char[] charsToRemove)
{
var result = new StringBuilder();
foreach (char c in self)
if (Array.IndexOf(charsToRemove, c) == -1)
result.Append(c);
return result.ToString();
}
这应该是相当有效的
通过使用params
参数,我们有几种方法可以调用它,如下示例代码所示:
string test = @"a/b\c[d]e:f|g<h>i+j=k;l,m?n*o";
// Pass an array of chars to remove:
string result1 = test.Remove(@"/\[]:|<>+=;,?*".ToCharArray());
Console.WriteLine(result1);
// Pass individually listed chars to remove:
string result2 = test.Remove('/', '\\', '[', ']', ':', '|', '<', '>', '+', '=', ';', ',', '?', '*');
Console.WriteLine(result2);
字符串测试=@“a/b\c[d]e:f|gi+j=k;l,m?n*o”;
//传递要删除的字符数组:
字符串result1=test.Remove(@/\[]:|+=;,?*”.ToCharArray());
控制台写入线(结果1);
//传递单独列出的字符以删除:
string result2=test.Remove(“/”、“\\”、“[”、“]”、“:”、“|”、“+”、“=”、“;”、“,”、“?”、“*”);
控制台写入线(结果2);
使用a。您的完整代码是什么?更干净的解决方案是创建一个
char[]
,其中包含您希望替换的所有不同字符。注意:Contains
不是必需的,因为如果它不存在,Replace将不会替换任何内容。我厌倦了下面的代码,但它总是说下面没有匹配项。下面是我将获得的字符串示例groupName=abcnd&dfsdfsf string groupName=abcnd,dfsdsf if(Regex.IsMatch(groupName,@)[/\[]:|<>+=;,?*]){groupName=Regex.Replace(groupName,@“[/\[]:|<>+=;,?*]”,string.Empty);}您是想用上面提到的空字符串替换所有发生的事件,还是想用代码中显示的空格替换它?这是一个很大的区别。@user3476088您想删除的字符中有很多特殊字符。查看文档:在这种情况下使用Regex并不是那么简单sed正则表达式如下所示,但它总是说找不到匹配项。下面的代码字符串groupName=abcnd&dfsdsf string groupName=abcnd,dfsdsf if(Regex.IsMatch(groupName,@“[/\[]:\>+=;,?*]”){groupName=Regex.Replace(groupName,@“[/\[\[]:<>+=,?*]”,string.Empty)}@user3476088您的正则表达式无效。您没有转义特殊字符。我认为您不必要地转义了大多数其他字符。只需转义\
和]
(除非您将其放在开头)。(另一方面,你应该如何在代码中标记一个反斜杠?@Rawling-Hmm,我已经用regex-tester检查过了,没有转义regex是无效的。可能检查的是错误的。我可以相信一个通用测试程序会让您转义/
,因为它通常是正则分隔符,但在C#中这不是必需的。大多数其他的([:|+=;,?*
)在字符类中没有特殊意义。它不是mystring=mystring.Replace(c,”)
在foreach
中创建了许多不必要的字符串
实例?@pwas:不要低估垃圾收集器。另外,只有14个替换,但并不多。然而,我编辑了我的答案,以显示StringBuilder
方法。只有14个。但是……如果源字符串很大呢?我知道GB会抓住联合国大学编辑字符串,但我们不知道什么时候。此外,当有方法在中高效创建时,增加GB的工作量有什么用?@pwas:如前所述,我对其进行了编辑,以显示一种节省(临时)内存的方法。“但我们不知道何时”不再引用对象(这里就是这种情况)内存是需要的。是的,我知道,但这并不意味着我们可以在不需要内存的时候浪费内存-更重要的是,当它不能加快操作时-创建许多大字符串实例也会消耗时间。无论如何,字符串生成器+1。
var pattern = @"/\[]:|<>+=;,?*";
var result = new string(sample.Where(ch => !pattern.Contains(ch)).ToArray());
var sb = new StringBuilder();
foreach (char t in sample)
{
if (!pattern2.Contains(t))
{
sb.Append(t);
}
}
result = sb.ToString();
public static class StringExt
{
public static string Remove(this string self, params char[] charsToRemove)
{
var result = new StringBuilder();
foreach (char c in self)
if (Array.IndexOf(charsToRemove, c) == -1)
result.Append(c);
return result.ToString();
}
string test = @"a/b\c[d]e:f|g<h>i+j=k;l,m?n*o";
// Pass an array of chars to remove:
string result1 = test.Remove(@"/\[]:|<>+=;,?*".ToCharArray());
Console.WriteLine(result1);
// Pass individually listed chars to remove:
string result2 = test.Remove('/', '\\', '[', ']', ':', '|', '<', '>', '+', '=', ';', ',', '?', '*');
Console.WriteLine(result2);