正则表达式替换 char 并在 .net C# 中转换为大写

Posted

技术标签:

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

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

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

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

谢谢, 周杰伦

【问题讨论】:

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

其他资源

fixed Statement (C# Reference)

unsafe (C# Reference)

【讨论】:

以上是关于正则表达式替换 char 并在 .net C# 中转换为大写的主要内容,如果未能解决你的问题,请参考以下文章

C#正则表达式指定替换

C# 正则表达式的替换超出了预期

使用正则表达式c#替换文档中的文本字段

在c#中使用/不使用正则表达式清除不需要的十六进制字符[重复]

正则表达式在 C# 中按组替换

了解下C# 正则表达式