String.Replace和Regex.Replace不使用IComparer中的特殊字符

时间:2013-12-02 21:38:58

标签: c# asp.net regex replace icomparer

以下控制台应用程序正常运行:

class Program
{
    static void Main(string[] args)
    {
        string plainx = "‘test data’ random suffix";
        plainx = Regex.Replace(plainx, @"‘", string.Empty);
        Console.WriteLine(plainx);
    }
}

然而它在ASP.Net应用程序中给我带来麻烦..我附加了VS Debug监视窗口和立即窗口的屏幕截图

(点击查看大图)
enter image description here

正如您所看到的,Regex.Replace中的Immediate Window有效 - 但不知道它在代码中是不起作用的(第71行)。我还使用String.Replace但没有成功。

修改 似乎存储在数据库中的值与编辑器显示的值相似......有点奇怪.. enter image description here

3 个答案:

答案 0 :(得分:4)

您是否真的检查过要比较的文字?它包含哪些Unicode代码点?

您的代码显示您尝试替换字形'‘',这是一个左侧的“智能引号”。角色的名称是LEFT SINGLE QUOTATION MARK,其代码点是0x2018(又名'\u2018')。这是您通常无法在键盘上输入的字符。

你可能看到的是字形'`',一个“反引号”。它的字符名称为GRAVE ACCENT,其代码点为0x0060(又名'\u0060')。这是当您按下标准美国键盘上的[未移位]波形键(数字行上最左侧的键)时键入的字符。

当然,它可能是许多其他字符中的任何一个,其字形类似于单引号。有关详细信息,请参阅Commonly Confused Characters

答案 1 :(得分:2)

您的代码中的单引号与您正在测试的字符串中的单引号不同。

直接使用testx[0]返回的十六进制值来保证我们使用正确的引号。

plainx = Regex.Replace(plainx, "\u2018", string.Empty);

答案 2 :(得分:0)

尝试替换:

@"‘" to @"\‘"

代码:

string plainx = "‘test data’ random suffix";
plainx = System.Text.RegularExpressions.Regex.Replace(plainx, @"\‘", string.Empty);
Console.WriteLine(plainx);
Console.Read();