【问题标题】:How to Replace any of these "/ \\ [ ] : | < > + = ; , ? *" Characters in a string with empty string in asp.net如何在asp.net中用空字符串替换字符串中的任何这些“/ \\ []:| < > + =;,?*”字符
【发布时间】:2014-08-06 16:07:10
【问题描述】:

我想用 asp.net c# 中的空字符串替换字符串中以下出现的任何字符 "/\[] : | + = ; , ? *"

我正在尝试用

替换它
mystring.contains('[')
 {
 mystring.Replace('[',' ');
 }

目前我正在按照上述方式进行操作。 有没有更清洁的方法来做到这一点。 感谢和问候

【问题讨论】:

  • 你的完整代码是什么?更简洁的解决方案是创建一个char[],其中包含您希望替换的所有不同字符。注意:Contains 不是必需的,因为 Replace 不会替换任何不存在的内容
  • 我厌倦了下面的代码,但它总是说下面不匹配是我将得到的示例字符串 string groupName = abcnd&dfsdfdsf string groupName = abcnd,dfsdfdsf if (Regex.IsMatch(groupName, @"[/ \\ [ ] : | + = ; , ? *]")) { groupName = Regex.Replace(groupName, @"[/ \\ [ ] : | + = ; , ? *]", 字符串。空的); }
  • 你想用上面提到的空字符串替换所有出现的地方,还是用代码中显示的空格替换它?这是一个很大的区别。
  • @user3476088 您要删除的字符中有很多特殊字符。检查文档:msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx 在这种情况下使用正则表达式不会那么简单。

标签: c# asp.net sharepoint


【解决方案1】:

有很多方法:

1) 通过正则表达式:

var pattern = @"[\/\\[\]\:\|\<>\+\=\;\,\?\*]";
var sample = "test * beacuse [a]";
var result = Regex.Replace(sample, 
                           pattern, 
                           string.Empty, 
                           RegexOptions.CultureInvariant);

2) 通过 linq:

var pattern = @"/\[]:|<>+=;,?*";
var result = new string(sample.Where(ch => !pattern.Contains(ch)).ToArray());

3) 通过 StringBuilder:

var sb = new StringBuilder();

foreach (char t in sample)
{
    if (!pattern2.Contains(t))
    {
        sb.Append(t);
    }
}

result = sb.ToString();

这些方法只是示例;)

【讨论】:

  • 我认为您不必要地逃避了大多数其他角色。只有\ ](除非你把它放在开头)需要被转义。 (另一方面,你应该如何在代码标记中标记一个反斜杠?)
  • @Rawling 嗯,我已经检查过正则表达式测试器,没有转义正则表达式是无效的。可能检查错了。
  • 我相信一个通用的测试器会让你逃避/,因为它通常是正则表达式分隔符,但这在 C# 中不是必需的。其他大多数 ([:|&lt;&gt;+=;,?*) 在字符类中没有特殊含义。
【解决方案2】:

你可以使用一个简单的循环,你不需要先检查它是否包含它:

foreach(char c in @"/\[]:|<>+=;,?*")
    mystring = mystring.Replace(c, ' ');

这会将所有出现的地方替换为与您的代码类似的空格。如果您想用空字符串替换它(如前所述),您可以使用:

foreach(char c in @"/\[]:|<>+=;,?*")
    mystring  = mystring.Replace(c.ToString(), "");

您可以通过使用 System.Text.StringBuilder 进行替换来稍微改进它:

StringBuilder sb = new StringBuilder(mystring);
foreach (char c in @"/\[]:|<>+=;,?*")
    sb.Replace(c.ToString(), "");
mystring = sb.ToString();

StringBuilder 在 CPU 周期和内存消耗方面不一定具有更高的性能,因为它并不总是创建新实例。

【讨论】:

  • 不是mystring = mystring.Replace(c, ' ');foreach 中创建了许多不必要的string 实例吗?
  • @pwas:不要低估垃圾收集器。此外,只有 14 个替代品,数量并不多。但是,我已经编辑了我的答案以显示StringBuilder-approach。
  • 只有 14 但是.. 如果源字符串很大怎么办?我知道 GB 会抓取未使用的字符串,但我们不知道什么时候。更何况,在有办法高效创作的情况下,增加GB更多工作的目的是什么?
  • @pwas:如前所述,我已经对其进行了编辑,以展示一种消耗更少(临时)内存的方法。 “但我们不知道什么时候” 什么时候不再引用对象(这里就是这种情况)并且需要内存。
  • 是的,我知道,但这并不意味着我们可以在不需要时浪费内存——更重要的是,当它不能使操作更快时——创建许多大字符串实例会消耗时间还。无论如何,为字符串生成器 +1。
【解决方案3】:

您可以使用@ThreeFx 提到的正则表达式。另一个技巧是拆分字符串并在之后重新加入:

var toBeRemoved = new char[] { '[', ']', '/', '\\', ':', '|', '<', '>', '+', '=', ';', ',', '?', '*' };
mystring = string.Join(string.Empty, mystring.Split(toBeRemoved));

【讨论】:

  • 我使用了如下正则表达式,但它总是说找不到匹配项。我在下面的代码字符串 groupName = abcnd&dfsdfdsf string groupName = abcnd,dfsdfdsf if (Regex.IsMatch(groupName, @ "[/ \\ [ ] : | + = ; , ? *]")) { groupName = Regex.Replace(groupName, @"[/ \\ [ ] : | + = ; , ? *]" ,字符串。空); }
  • @user3476088 您的正则表达式无效。您没有转义特殊字符。
【解决方案4】:

如果您发现自己经常需要从这样的字符串中删除字符,您可以编写一个简单的扩展方法:

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多