C# 如何比较两个字符串并忽略c中的特殊字符

C# 如何比较两个字符串并忽略c中的特殊字符,c#,string,C#,String,我想比较c中的两个字符串,如果其中一个字符串有任何特殊字符,那么应该忽略它- string a1= "he is a good guy"; string a2="h2$#%# is a good guy"; 然后在string.ReferenceEquals1、a2之后,它应该返回True吗 我如何才能做到这一点?您可以使用正则表达式来解决您的问题。有关此主题的一些重要资源,请访问: msdn官方网页- Dotnetperls- 一般,理论中与语言无关的正则表达式- 编辑: 我不认为,作为官方

我想比较c中的两个字符串,如果其中一个字符串有任何特殊字符,那么应该忽略它-

string a1= "he is a good guy";
string a2="h2$#%# is a good guy";
然后在string.ReferenceEquals1、a2之后,它应该返回True吗


我如何才能做到这一点?

您可以使用正则表达式来解决您的问题。有关此主题的一些重要资源,请访问:

msdn官方网页- Dotnetperls- 一般,理论中与语言无关的正则表达式- 编辑:

我不认为,作为官方声明,ReferenceEquals是你想要的东西:

确定指定的对象实例是否为同一实例


您希望比较字符串的内容,因此请查看regex。

您可以定义自定义比较方法

例如

按以下方式使用:

string a1= "he is a good guy";
string a2= "h2$#%#w is a good guy";

if (a1.CustomCompare(a2)){
  //you should now get here
}
首先,这里不好,因为它比较的是引用,而不是值。因此,若你们比较两个不同的变量,那个么你们的代码总是错误的,字符串不会被插入,但它是另一个故事

要比较字符串,请使用方法。但首先,您必须去掉特殊字符,在正则表达式的帮助下,这是可能的:

string a2 = "h2$#%# is a good guy";
string a3 = Regex.Replace(a1, @"[^\w\d\s]", "");
这表明您希望用空字符串替换所有不是^word字符\w、数字\d或空白\s的内容

使用它,您的解决方案应该如下所示:

string.Equals(Regex.Replace(a1, @"[^\w\d\s]", ""), 
              Regex.Replace(a2, @"[^\w\d\s]", ""));
要不重复正则表达式代码,可以为字符串编写一个帮助程序扩展方法:

public static class StringExtensions
{
    public static string RemoveSpecialCharacters(this string str)
    {
        return Regex.Replace(str, @"[^\w\d\s]", "");
    }
}
您的代码将是:

string.Equals(a1.RemoveSpecialCharacters(), 
              a2.RemoveSpecialCharacters());

你有没有读过关于他的书?很抱歉,您的问题没有任何意义。请尝试先删除特殊字符,然后进行比较。您对特殊字符的定义是什么?2$%只是一些角色,对我来说并不特别。您对字符串的编码有问题吗?是的,我读过关于ReferenceEquals的文章,它用于字符串比较。不,不是。再读一遍。
string.Equals(a1.RemoveSpecialCharacters(), 
              a2.RemoveSpecialCharacters());