Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要帮助修改曾经有效的正则表达式吗_C#_Regex_String_Dictionary - Fatal编程技术网

C# 需要帮助修改曾经有效的正则表达式吗

C# 需要帮助修改曾经有效的正则表达式吗,c#,regex,string,dictionary,C#,Regex,String,Dictionary,我试图解析一个字符串并构建一个字典,其中包含字段的名称及其作为key/value的值 代码如下: var dictPriceList = Regex.Matches(priceListToParse, @"""(.+?) - \$([\d.]+)").Cast<Match>() .ToDictionary(x => x.Groups[1].Value,

我试图解析一个字符串并构建一个字典,其中包含字段的名称及其作为key/value的值

代码如下:

var dictPriceList = Regex.Matches(priceListToParse, @"""(.+?) - \$([\d.]+)").Cast<Match>()
                                         .ToDictionary(x => x.Groups[1].Value,
                                                       x => x.Groups[2].Value);
在这里,我需要的唯一值是标签“忍者”和“莱昂纳多-$0.99”。所以我最终会得到这些值:

键\值

莱昂纳多\0.99

多纳泰罗\0.25

拉斐尔\0.15

米开朗基罗\0.14

好的,我已经试过解决这个问题,并得到了你们所有人的帮助,我很感激,但从那时起我就没有机会试过了。但是从那时起,添加了
t\“bandanaColor\:\“rgb(0,0255)\”,
行,我需要忽略它,因为它与我想做的事情无关。现在,我想,因为这条线,线路崩溃了

有人能帮我弄清楚如何得到我想要的东西吗

编辑

当代码到达正则表达式行时,以下是我获得的崩溃:


已经添加了具有相同密钥的项。
好的,首先,您提供的JSON有一些错误。假设这只是创建问题,没有更大的问题,最终结果应该类似于此:

“班达纳科洛尔(Bandanac颜色)公司”如下:“班达纳科洛尔(Ban达纳科洛尔)的一部分:,,,,“数据”数据:,,,,,“数据”数据:[[1336648565655241,0.99,,[13366465656565656565656565655.10万万诺诺诺诺诺颜色\[万万万万纳科诺有色有色有色。”以下以下以下以下以下以下以下几种几种几种几种几种:“,,,,,,,,,,,“手手手手手手手手手手手手手诺”,”,”,”,”,”,”,”。“。“忍忍忍忍忍者们::::::::::::::::::“莱昂纳纳多多多多多多多多多“莱昂纳多多多多多多多多多10 10 10 10 10 10 10 10 10 10 10 10.99,,“莱昂纳多多多多多多多多多多1587,0.25],[1366226367262,0.25][13662848484992043,0.25[136626284992043,0.20.25]]},,,,,,,[[13662628484842042043.2043.3,0.20.20[13662628484842043.2043.2043.3,3,0.20.25],,,,,,,,,,,,,“忍忍者们:,,,,,,,,,,,,,“忍忍者:::::,,,,,,,,,,,,,,,,,,,,“忍忍忍忍者::::::::::,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,::::::::::,,,,,,,,,,,,,,,,,,“忍忍忍忍者:::[1366284992043,0.14]}]

(可以使用类似的站点进行测试。)

现在,就解析而言,正则表达式是有问题的。JSON有很多不同的障碍,因此解析器将是最好的选择。而且,为了避免重新发明轮子,图书馆碰巧工作得非常好。举个例子:

/* includes
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
*/

// the original JSON string
String jsonString = "[{\"bandanaColor\":\"rgb(0,0,255)\",\"ninja\":\"Leonardo - $0.99\",\"data\":[[1336485655241,0.99],[1336566333236,0.99],[1336679536073,0.99],[1336706394834,0.99],[1336774593068,0.99],[1366284992043,0.99]]},{\"bandanaColor\":\"rgb(128,0,128)\",\"ninja\":\"Donatello - $0.25\",\"data\":[[1361061084420,0.23],[1366102471587,0.25],[1366226367262,0.25],[1366284992043,0.25]]},{\"bandanaColor\":\"rgb(255,0,0)\",\"ninja\":\"Raphael - $0.15\",\"data\":[[1327305600000,0.15],[1365583220422,0.15],[1365669396241,0.15],[1365669396241,0.15],[1365753433493,0.15],[1366284992043,0.15]]},{\"bandanaColor\":\"rgb(255,165,0)\",\"ninja\":\"Michelangelo - $0.14\",\"data\":[1366284992043,0.14]}]";
// The parsed result (using Json.NET)
var json = JsonConvert.DeserializeObject(jsonString);
// Grab all the "ninjas"
String[] ninjas = (json as JArray).Select (x => x.Value<String>("ninja")).ToArray();
// Begin aggregating the results
IDictionary<String, Double> result = ninjas.ToDictionary(
    x => x.Substring(0, x.IndexOf(" - ")),
    y => {
        Double d;
        return Double.TryParse(y.Substring(y.IndexOf(" - ") + 4), out d) ? d : default(Double);
    }
);
我使用了简单的字符串解析(通过
-
实例进行拆分),但如果需要,您可以进行更详细的分析


第二版

投资时间多一点(因为您没有创建对象),但回报是您不必学习处理JObject、JArray等的Json语法。相反,它将数据序列化到类(您创建的)中,使检索信息更加流畅。e、 g

public class ParentObj
{
    public String bandanaColor;
    public String ninja;

    public String NinjaName
    {
        get
        {
            String ninja = this.ninja ?? String.Empty;
            Int32 i = ninja.IndexOf(" - ");
            return i != -1 ? ninja.Substring(0, i) : String.Empty;
        }
    }
    public Double NinjaPrice
    {
        get
        {
            String ninja = this.ninja ?? String.Empty;
            Double price;
            Int32 i = ninja.IndexOf(" - $");
            return i != -1 && Double.TryParse(ninja.Substring(i + 4), out price) ? price : default(Double);
        }
    }
}

void Main()
{
    // the original JSON string
    String jsonString = "[{\"bandanaColor\":\"rgb(0,0,255)\",\"ninja\":\"Leonardo - $0.99\",\"data\":[[1336485655241,0.99],[1336566333236,0.99],[1336679536073,0.99],[1336706394834,0.99],[1336774593068,0.99],[1366284992043,0.99]]},{\"bandanaColor\":\"rgb(128,0,128)\",\"ninja\":\"Donatello - $0.25\",\"data\":[[1361061084420,0.23],[1366102471587,0.25],[1366226367262,0.25],[1366284992043,0.25]]},{\"bandanaColor\":\"rgb(255,0,0)\",\"ninja\":\"Raphael - $0.15\",\"data\":[[1327305600000,0.15],[1365583220422,0.15],[1365669396241,0.15],[1365669396241,0.15],[1365753433493,0.15],[1366284992043,0.15]]},{\"bandanaColor\":\"rgb(255,165,0)\",\"ninja\":\"Michelangelo - $0.14\",\"data\":[1366284992043,0.14]}];";
    // The parsed result (using Json.NET in to our custom object)
    IEnumerable<ParentObj> json = JsonConvert.DeserializeObject<IEnumerable<ParentObj>>(jsonString.TrimEnd(';'));
    // the use Linq to create a dictionary from our custom getters
    IDictionary<String, Double> result = json.ToDictionary (x => x.NinjaName, y => y.NinjaPrice);
}
公共类ParentObj
{
公共丝带;
公共字符串忍者;
公共字符串NinjaName
{
得到
{
String ninja=this.ninja??String.Empty;
Int32 i=忍者索引(“-”);
返回i!=-1?忍者。子字符串(0,i):字符串。空;
}
}
公共双盲法
{
得到
{
String ninja=this.ninja??String.Empty;
双倍价格;
Int32 i=忍者索引(“-$”);
返回i!=-1&&Double.TryParse(忍者子串(i+4),输出价格)?价格:默认值(双);
}
}
}
void Main()
{
//原始JSON字符串
该字符串的jsonString字符串的jsonString=“[{“班达纳科洛尔的手手手手手手手手手卷”以下以下以下几方面的字符串的JSon字符串的以下以下几方面的字符串的字符串的字符串的字符串的以下以下几方面的JSon字符串的以下几方面的字符串的以下以下几方面的字符串的字符串的字符串的字符串的字符串的字符串的字符串的字符串的字符串的字符串的字符串的字符串的字符串的:[[[[[[[[[[[[[3万“班达纳诺诺诺诺诺诺诺颜色(0.99-$0.99-$0.99-$0.99-$0.99-0.99=”””””,,,,,,,,,,,,,,,,,“数据”数据”数据”数据:,,,,,,“数据”数据:[[[[[[[[[[[[[[[13363636646464646465656565656565656565656565656523],[1366102471587,0.25],[1366262263263672626,0.0.25],[136626262622626262626626262626262626226.0.25],[[136626262626262626226[[136626262263263263626226,0.20.25],[1366262626262626246623,0.25[13662848484848484842043.25.25]]},,,,,,,,,,,,,,[[13662626262626“BandaNaNaNaNa手手手手手手手手手手手手手手手手手手手手手手手民”的7 7 7.0.0.0.0.0.0.0.10几几几几:::::::::::::::::::“rgb(rgb(rgb(rgb(255.0.0.0.0.0.0.0.0.0.[1366284992043,0.14]}];";
//解析结果(在自定义对象中使用Json.NET)
IEnumerable json=JsonConvert.DeserializeObject(jsonString.TrimEnd(“;”);
//使用Linq从我们的自定义getter创建字典
IDictionary result=json.ToDictionary(x=>x.NinjaName,y=>y.NinjaPrice);
}

与上面的结果相同,但现在解析是通过带有自定义getter的
ParenObj
类完成的。

Newtsonsoft的Json.NET将使这变得更容易(无需尝试使用regex进行破解)。这不是我第一次听说Json.Net!但我不知道它是如何工作的。我会去看看,但这并不能解决我现在的问题。使用正则表达式并不能解决你的问题。如果你要解析Json数据,你不能不使用为吃、睡和呼吸Json对象编写的解析器。哦,好吧。如果我理解得很好,那么我在做什么reading是一个JSon对象,由于我将它收集在一个字符串中并试图在其上使用正则表达式,我只是让它变得更难?而且,您有JSon错误(最后一个
数据:
应该是
数据:[[…]]
(它是一个双数组,但只从一个开头开始
[
——可能是一个复制粘贴错误?)有意思。我遇到了一个崩溃。可能是我需要删除“var results=”吗反序列化对象前的第行?这正好是:我发现html视图中使用的其余javascript也在字符串中找到。因此,我有一个弹出的错误:
阅读完JSON内容后遇到的其他文本:;.Path“”,第54行,位置2。
@HerveS:Call a
.TrimEnd(“;”)
,然后将其传递给
JsonConvert.DeserializeObject
。就快到了!我用你给我的东西设法得到了字典,但得到的字典中有一个问题。每个双精度都是0。但是数组中的双精度很好。IDictionary行中有问题吗?@HerveS
Key           Value
Leonardo      0.99 
Donatello     0.25 
Raphael       0.15 
Michelangelo  0.14 
public class ParentObj
{
    public String bandanaColor;
    public String ninja;

    public String NinjaName
    {
        get
        {
            String ninja = this.ninja ?? String.Empty;
            Int32 i = ninja.IndexOf(" - ");
            return i != -1 ? ninja.Substring(0, i) : String.Empty;
        }
    }
    public Double NinjaPrice
    {
        get
        {
            String ninja = this.ninja ?? String.Empty;
            Double price;
            Int32 i = ninja.IndexOf(" - $");
            return i != -1 && Double.TryParse(ninja.Substring(i + 4), out price) ? price : default(Double);
        }
    }
}

void Main()
{
    // the original JSON string
    String jsonString = "[{\"bandanaColor\":\"rgb(0,0,255)\",\"ninja\":\"Leonardo - $0.99\",\"data\":[[1336485655241,0.99],[1336566333236,0.99],[1336679536073,0.99],[1336706394834,0.99],[1336774593068,0.99],[1366284992043,0.99]]},{\"bandanaColor\":\"rgb(128,0,128)\",\"ninja\":\"Donatello - $0.25\",\"data\":[[1361061084420,0.23],[1366102471587,0.25],[1366226367262,0.25],[1366284992043,0.25]]},{\"bandanaColor\":\"rgb(255,0,0)\",\"ninja\":\"Raphael - $0.15\",\"data\":[[1327305600000,0.15],[1365583220422,0.15],[1365669396241,0.15],[1365669396241,0.15],[1365753433493,0.15],[1366284992043,0.15]]},{\"bandanaColor\":\"rgb(255,165,0)\",\"ninja\":\"Michelangelo - $0.14\",\"data\":[1366284992043,0.14]}];";
    // The parsed result (using Json.NET in to our custom object)
    IEnumerable<ParentObj> json = JsonConvert.DeserializeObject<IEnumerable<ParentObj>>(jsonString.TrimEnd(';'));
    // the use Linq to create a dictionary from our custom getters
    IDictionary<String, Double> result = json.ToDictionary (x => x.NinjaName, y => y.NinjaPrice);
}