C#:用 *single*\替换 single/

标签 c# string replace

我发现很多帖子都在回答类似的问题(例如“如何用 / 替换 \”或“如何替换 \\” by \”。我理解所有这些,但没有一个能解决我的特殊问题。这里是:

我正在从注册表中读取路径字符串,其中包含“///”而不是“\”(易于替换),但也包含“/u00xy"用于 unicode 字符。为了使用正确的 unicode 字符成功解析字符串,我必须将 / 替换为 single \。但是每一种可能的方式(string.replaceregex.replace)都会导致“\\u00xy”而不是“\u00xy“!

或者,我收到类似“Unrecognized escape sequence”的错误。例如:

str.Replace("/u00", @"\u00")   // results in "\\u00"

同时:

str.Replace("/u00", "\u00")    // gives an error.

我没主意了!

最佳答案

我相信这样的事情应该适合你:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Globalization;

namespace Test
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine(ConvertUnicodeEscapes("aa/u00C4bb/u00C4cc/u00C4dd/u00C4ee")); //  prints aaÄbbÄccÄddÄee
        }

        private static Regex r = new Regex("/u([0-9A-F]{4})");
        private static string ConvertUnicodeEscapes(string input)
        {
            return r.Replace(input, m => {
                int code = int.Parse(m.Groups[1].Value, NumberStyles.HexNumber);
                return char.ConvertFromUtf32(code).ToString();                    
            } );
        }       

    }
}

正如 Jon 所指出的,这不仅仅是用单个“\”替换“/”。你不能真的那样做,因为 '\' 是转义字符。首先,我们必须匹配组“/uXXXX”。然后我们将字符串的十六进制部分(XXXX)转换为 utf32(即 unicode)中的整数。最终得到那个utf32编码对应的字符。

关于C#:用 *single*\替换 single/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13236770/

相关文章:

Python - Pandas - 根据其他列中的值替换列中的字符串 - 处理子字符串

javascript - 验证 JavaScript 中任意两个特定字母的输入,例如 'a' 和 'i',并将 'a' 替换为 @,将 'i' 替换为?

macos - 我可以从终端快速搜索/替换多个 .txt 文件吗?

mysql - SQL - 来自 [剧透 :abcdefgh] to [spoiler]

c# - 服务器端 SignalR 连接在长时间正常运行后失败

c# - 具有多个区域的 Excel Get_Range

java - 为什么像 concat 这样的 String 方法会创建一个新的 String 对象?

c# - 有没有办法从某种类型的 JSON.NET JObject 中删除节点?

c# - 对象引用,无法找到用户 ID

Switch 语句中的字符串 : 'String' does not conform to protocol 'IntervalType'