【问题标题】:String Replace not work字符串替换不起作用
【发布时间】:2013-05-19 17:15:04
【问题描述】:

我有一个字符串(它的值的一个例子是{"id":"123241077871_4423423423414"}),我只需要带有数字和下划线的部分。但是,我使用String.Replace 方法的方法不起作用。谁能帮我?

这是我尝试过的:

Settings.Default["lastid"].ToString().Replace('{"id":"'+"}',null);

【问题讨论】:

  • 那是无效的 C# 开始,所以你应该得到一个编译时错误......它不是一个有效的字符串文字。我建议在这里避免直接的字符串操作 - 只需将其解析为 JSON 并使用解析后的值。
  • 为了将来参考,您的问题应该扩大到某些东西不起作用的方式。结果错误?编译器错误?运行时错误?等

标签: c# json string parsing replace


【解决方案1】:

你的代码应该是

Settings.Default["lastid"].ToString().Replace("{\"id\":\"", "").Replace("\"}","");

正如 Jon Skeet 所说,目前,它不是有效的字符串文字。此外,Replace 只搜索一个文本字符串。你不能一次完成这两个。

【讨论】:

  • 这是一种相当强烈的指出多余分号的方式。固定。
【解决方案2】:

如何使用real json parser 并以正确的方式进行操作

var id = JsonConvert.DeserializeAnonymousType(s, new { id = "" }).id;

【讨论】:

    【解决方案3】:

    尝试使用正则表达式。

    string json = @"{""id"":""123241077871_4423423423414""}" //or whatever your value is
    Regex.Match(json, @"{""id"":""(\d+_\d+)""}".Groups[1] //will give you your result
    

    【讨论】:

      【解决方案4】:

      将您的代码更改为:

      Settings.Default["lastid"].ToString().Replace("{\"id\":","");
      Settings.Default["lastid"].ToString().Replace("\"}\"","");
      

      【讨论】:

      • 您的代码不会删除 123241077871_4423423423414 周围的开始和结束引号。
      【解决方案5】:

      只需一次使用正则表达式

      string test = Settings.Default["lastid"].ToString();
      string result = Regex.Replace(test, @"[^0-9_]", @"");
      Console.WriteLine(result);
      

      正则表达式模式意味着:

      • 匹配括号内不包含 (^) 的任何字符
      • 并将其替换为空字符串。

      正如@newStackExchangeInstance 在下面的 cmets 中所指出的,[^0-9_] 的模式可以在 [^\d_] 中更改,以保持排除在替换之外的其他 Unicode Numerical Characters

      【讨论】:

      • 改用[^\d_]。更好的是,这意味着如果他得到一些 unicode 数字字符,它们仍然算作数字并且不会被替换。
      • @newStackExchangeInstance 抱歉,我不知道这一点。你能给我举个例子吗?
      • stackoverflow.com/questions/6479423/… 看上面的答案。 (旁注:我知道它说的是 python,但它也适用于 C#)
      • @newStackExchangeInstance 很好,很高兴知道,对我来说不是立即使用,但谢谢。我会用你的发现来修正我的答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 2016-02-15
      • 2016-10-05
      • 2012-07-08
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多