【问题标题】:How to modify matched values regex in C#如何在 C# 中修改匹配值正则表达式
【发布时间】:2018-04-22 13:31:30
【问题描述】:

我正在尝试解析我收到的一些 JSON。我收到的 JSON 包含我想去掉的空格和下划线。

{"No_":"SL00101","Description":"Logies_3","Description_2":"","Customer No_":"1234","Name":"SomeName"}

使用下面的正则表达式匹配

([a-zA-Z0-9_ ]*\":)

我想将变量更改为不包含任何下划线或空格。 所以: No_变成No

还有

客户编号_变成客户编号。

我尝试了替换和替换,但我找不到如何修改匹配的值。

例如

var newJason = Regex.Replace(json, "(?<variableName>([a-zA-Z0-9_ ]*\":))", "${variableName}".Replace(" ", string.Empty));

【问题讨论】:

  • 你看过Regex.Replace吗?
  • 您最好使用 JSON 解析器,将结果转换为您想要的命名并序列化。这样你就不需要弄清楚什么是标识符和什么是值。 (由于 JSON 不是一种正则语言——在正式意义上——正则表达式不能用于可靠地处理它。)
  • 为什么要替换下划线?您是否在将其映射到您的类时遇到问题?您可以通过属性指定备用映射,例如使用JsonProperty。您甚至可以指定自己的naming strategy 来处理下划线。无需更换
  • @PanagiotisKanavos 我希望它更改名称,以便它们匹配命名约定而无需手动映射:)
  • 然后你就可以自己写NamingStrategy了

标签: c# json regex replace


【解决方案1】:

所以你想重命名你的 json 属性,可能是因为你想在 c# 中获得体面的名字

宁可通过 NuGet 添加 Newtonsoft.Json 库,并使用 JsonProperty 属性设置您的属性名称。

public class YourClass
{
   [JsonProperty(PropertyName = "No_")]
   public string No{ get; set; }

   [JsonProperty(PropertyName = "Customer No_")]
   public string CustomerNo{ get; set; }
}

您现在可以使用遵循命名约定的属性反序列化为您的 c# 类。

反序列化

var yourClassInstance = Newtonsoft.Json.JsonConvert.DeserializeObject<YourClass>("yourJsonString");

【讨论】:

    【解决方案2】:

    这可能对您有所帮助:

    var jsonString = "";
    var obj = JSON.parse(json);
    jsonString += "{";
    for (var key in obj) {
        jsonString += '"' + key.replace("/_/g","").replace("/ /g","") + ":" + obj[key] + '",'
    }
    jsonString = jsonString.slice(0,-1)  //we remove the last comma (,)
    jsonString += "}";                   //and we close the future json object 
    

    然后您可以添加 var resultJsonObject = JSON.parse(jsonString) 来获取最终的 json 对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 2015-10-12
      相关资源
      最近更新 更多