替换unicode字符

时间:2013-01-03 13:44:48

标签: c# regex string replace

String jData="Memur adayar\u0131n\u0131n en b\u00fcy\u00fck sorunar"
    + "\u0131ndan KPSS \u0 131 ";   
jData = Regex.Replace(jData, @"\\u0 ", @"\\u0", RegexOptions.Compiled).Trim();

我必须用"\u0 "替换jData中的"\u0"(即,如果有的话,删除尾随的空白字符),但我使用的方法不起作用。我该怎么办?

4 个答案:

答案 0 :(得分:1)

因此,您在字符串中遇到了一些格式错误的Unicode转义符,并且您希望通过删除0之后的任何空格来修复它们。这很简单:

jData = Regex.Replace(jData, @"(\\u0)\s+(\w+)", "$1$2");

所有这一切中最困难的部分是弄清楚所有反斜杠应该是什么意思。 C#可以帮助你支持逐字字符串的替代字符串文字语法,你必须用反斜杠转义的唯一字符是反斜杠本身。 (你也必须转义引号,但你用另一个引号来表达,即"")。


有了这个,我回答这个问题的真正原因是建议你不要使用RegexOptions.Compiled。我相信你听过很多人说它让正则表达式工作得更快。这是真的,但这是过于简单化了。请阅读this article,以便对此问题进行详细讨论。帮自己一个忙,忘记RegexOptions.Compiled甚至存在,直到你遇到一个没有它你无法解决的问题。

答案 1 :(得分:0)

查找:@"\\u0 " 替换:@"\\u0"

他们是一样的。尝试使用大写O或普通o

答案 2 :(得分:0)

我认为我得到了它的工作

string jData= @"Memur adayar\u0131n\u0131n en b\u00fcy\u00fck sorunar\u0131ndan KPSS \u0 131 ";   
jData = Regex.Replace(jData, @"\\u0 ", @"\u0", RegexOptions.Compiled).Trim();

注意我在输入字符串前面添加了额外的'@'。在正则表达式部分,我将第三个参数更改为@"\u0"

答案 3 :(得分:0)

您的示例字符串存在问题。我假设您确实想要字符串中的反斜杠,在这种情况下,最简单的方法是在字符串文字之前放置@。然后我相信你在第二行中遇到了相反的问题,你应该在每个字符串中只使用一个反斜杠,或者省略@。 这里没有理由使用Regex.Replace()。 jData.Replace()就足够了:

        String jData=@"Memur adayar\u0131n\u0131n en b\u00fcy\u00fck sorunar"
            + @"\u0131ndan KPSS \u0 131 ";   
        jData = jData.Replace(@"\u0 ", @"\u0").Trim();