【问题标题】:Regex to replace char and convert to uppercase in .net C#正则表达式替换 char 并在 .net C# 中转换为大写
【发布时间】:2018-12-23 03:31:12
【问题描述】:

我有一个巨大的 json 字符串。我想替换所有“_abc”引用 属性名称为“Abc”。如何在 C# 中使用正则表达式?

使用普通的 .net 替换,我可以执行以下操作来删除“_”实例,但不知道如何将第一个字母转换为大写。

text = jsonString.Replace("\"_", "\"");

谢谢, 周杰伦

【问题讨论】:

  • 使用库迭代 JSON 字符串然后替换感兴趣的键/值不是更安全的选择吗?
  • 我试过了,但结果很慢。我使用 json.net 和合约类型解析器的方法来做到这一点。
  • 你想尝试的是text = Regex.Replace(jsonString, @"_(\p{Ll})", m => m.Groups[1].Value.ToUpper());,但你应该只对纯文本运行正则表达式,JSON不是纯文本。
  • 这个帖子中有一个答案,您可能会发现它很有用stackoverflow.com/questions/244531/…
  • regex 将慢 10 到 100 倍,然后使用不安全和大写的下划线后的下一个字符将你自己的字符串解析为固定数组,只是说......哦等等,那不是你想要什么

标签: c# json regex string


【解决方案1】:

因为您想要速度,所以您可能感兴趣也可能不感兴趣

unsafe public static string Convert(string input)
{
   fixed (char* pInput = input)
   {
      char* p1, p2, len = pInput + input.Length;
      for (p1 = p2 = pInput + 1; p2 < len; p1++, p2++)
         *p1 = *(p2 - 1) == '"' && *p2 == '_' ? char.ToUpper(*++p2) : *p2;
      return input.Substring(0, (int)(p1 - pInput));
   }
}

它只是将"_&lt;char&gt; 替换为"&lt;Upper case char&gt;

在我的电脑上它可以做到 445 Mb 1.8 秒

示例输入

{
   "menu":{
      "id":"_file",
      "value":"_file",
      "popup":{
         "menuitem":[
            {
               "value":"_new",
               "onclick":"_createNewDoc()"
            },
            {
               "value":"_open",
               "onclick":"_openDoc()"
            },
            {
               "value":"_close",
               "onclick":"_closeDoc()"
            }
         ]
      }
   }
}

输出

{
   "menu":{
      "id":"File",
      "value":"File",
      "popup":{
         "menuitem":[
            {
               "value":"New",
               "onclick":"CreateNewDoc()"
            },
            {
               "value":"Open",
               "onclick":"OpenDoc()"
            },
            {
               "value":"Close",
               "onclick":"CloseDoc()"
            }
         ]
      }
   }
}

其他资源

【讨论】:

    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2023-04-02
    相关资源
    最近更新 更多