C# 如何在C中修改匹配值正则表达式#

C# 如何在C中修改匹配值正则表达式#,c#,json,regex,replace,C#,Json,Regex,Replace,我正在尝试解析我收到的一些JSON。我收到的JSON包含我想要去掉的空格和下划线 {"No_":"SL00101","Description":"Logies_3","Description_2":"","Customer No_":"1234","Name":"SomeName"} 使用下面的正则表达式,我匹配 ([a-zA-Z0-9_ ]*\":) 我想将变量更改为没有任何下划线或空格。 因此: “不”变成了“不” 及 客户编号变为客户编号 我尝试过替换和替换,但找不到如何修改匹配的值

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

{"No_":"SL00101","Description":"Logies_3","Description_2":"","Customer No_":"1234","Name":"SomeName"}
使用下面的正则表达式,我匹配

([a-zA-Z0-9_ ]*\":)
我想将变量更改为没有任何下划线或空格。 因此: “不”变成了“不”

客户编号变为客户编号

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

比如说

var newJason = Regex.Replace(json, "(?<variableName>([a-zA-Z0-9_ ]*\":))", "${variableName}".Replace(" ", string.Empty));
var newJason=Regex.Replace(json,“(?([a-zA-Z0-9\*\”:)”,“${variableName}.Replace(“,string.Empty”);
这可能会帮助您:

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对象

,因此您希望重命名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");
var yourClassInstance=Newtonsoft.Json.JsonConvert.DeserializeObject(“yourJsonString”);

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