C#用字符串替换“随机”文本(通配符)

时间:2017-01-02 16:26:47

标签: c# string random replace wildcard

我想替换这个字符串:“color”:“efea27”,“color”:“0000ff”, 但“efea27”可能是任何东西(它是随机的)。我想将其更改为用户输入的内容。例如0000ff当我不知道颜色“”之间是什么时我该怎么做?

(我要编辑的这个文件:pastebin.com/JWzJQcVm)

谢谢! -shinevision

3 个答案:

答案 0 :(得分:1)

您可以像这样使用Json.NET

var newColor = "hello";
var jtoken = JObject.Parse("{yourinput}");

var colorProperties = jtoken
                      .Descendants()
                      .OfType<JProperty>()
                      .Where(x => x.Name == "color")
                      .ToList();

foreach (var prop in colorProperties)
{
    prop.Replace(new JProperty("color", newColor));
}
var result = jtoken.ToString(Newtonsoft.Json.Formatting.Indented);

正如其他评论所说,如果需要,您需要添加nuget包:Install-Package Newtonsoft.Json 并添加相关的命名空间:

using Newtonsoft.Json.Linq;
using System.Linq;

此代码将更改所有出现的&#34;颜色&#34;整个输入中的属性,无论它的层次结构如何,这可能是您想要的,也可能不是您想要的。

答案 1 :(得分:0)

选项1

根据您想要的模块化,这将很快完成工作。但是,如果您的上下文比原始帖子看起来更复杂,那么它不是很方便:

var yourColor = "\"Color\":\"efea27\"";
var split = yourColor.Split(':');
split[1] = "YourOwnText";
yourColor = String.Join(":", split);

Console.WriteLine(yourColor); // "Color":"YourOwnText"

基本上,在数组中存储键和原始字符串的值,用你的值替换它们,然后用“:”作为分隔符连接它们。

选项2

我从不使用Json.Net的这个feature,但它应该完成这项工作。要使用它,您需要安装nuget依赖项:

Install-Package Newtonsoft.Json -Version 9.0.1

如果我有时间,我会尝试用它写一些东西(这里有一些tips)。

答案 2 :(得分:0)

正则表达式替换应该能够做你想做的事情:

using System.Text.RegularExpressions;

//Matches: "color":"######" where #'s can be A-F and 0-9
Regex r = new Regex("\"color\":\"[a-fA-F0-9]{6}\"");

//Example input (will be your JSON)
string json = "some stuff \"color\":\"efea27\" more stuff";

//Color to replace original with
string newColor = "\"color\":\"FF0000\"";

//output is: some stuff "color":"FF0000" more stuff
json = r.Replace(json, newColor);

为了使它更具可重复性,你可以做这样的事情(只需用你的输入替换字符串&#34; 0000FF&#34;)

string replaceFormat = "\"color\":\"{0}\"";
json = r.Replace(json, string.Format(replaceFormat, "0000FF"));

请注意,这将取代所有出现的&#34; color&#34;:&#34; ######&#34;在字符串中。