Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 替换unicode字符_C#_Regex_String_Replace - Fatal编程技术网

C# 替换unicode字符

C# 替换unicode字符,c#,regex,string,replace,C#,Regex,String,Replace,我必须将jData中的“\u0”替换为“\u0”(即,如果有尾随空格字符,请删除它),但我使用的方法不起作用。我该怎么办?查找:@“\\u0” 替换:@“\\u0” 它们是一样的。用大写字母O或普通字母O试试看,我想我已经成功了 String jData="Memur adayar\u0131n\u0131n en b\u00fcy\u00fck sorunar" + "\u0131ndan KPSS \u0 131 "; jData = Regex.Replace(jData,

我必须将jData中的
“\u0”
替换为
“\u0”
(即,如果有尾随空格字符,请删除它),但我使用的方法不起作用。我该怎么办?

查找:
@“\\u0”
替换:
@“\\u0”


它们是一样的。用大写字母O或普通字母O试试看,我想我已经成功了

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

注意,我在输入字符串前面添加了一个额外的
'@'
。在regex部分中,我将第三个参数更改为
@“\u0”

示例字符串有一个问题。我假设您实际上想要字符串中的反斜杠,在这种情况下,最简单的方法是将@放在字符串文本之前。然后我相信在第二行你会遇到相反的问题,你应该在每个字符串中只使用一个反斜杠,或者省略@。 这里没有理由使用Regex.Replace()。jData.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();

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

        String jData=@"Memur adayar\u0131n\u0131n en b\u00fcy\u00fck sorunar"
            + @"\u0131ndan KPSS \u0 131 ";   
        jData = jData.Replace(@"\u0 ", @"\u0").Trim();
这一切中最困难的部分是弄清楚所有反斜杠的含义。C#可以帮助您支持逐字字符串的替代字符串文字语法,您必须用反斜杠转义的唯一字符是反斜杠本身。(您也必须转义引号,但可以使用另一个引号,即
”)



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

但是在你的代码中,它们都
u0
?jData
真正来自哪里?您当前的代码无法编译,因为
\u0
在C#string文本中无效。不,它们无效。@“\\u0”中有空格字符。此外,替换字符串应为
“@\u0”
“\\u0”
。按照现在的方式,将原来的一个反斜杠替换为两个反斜杠。
jData = Regex.Replace(jData, @"(\\u0)\s+(\w+)", "$1$2");