C# LINQ或REGEX从字符串中提取特定文本

C# LINQ或REGEX从字符串中提取特定文本,c#,regex,linq,C#,Regex,Linq,我的C#模型中有一个字符串填充了以下字符串: “[{\'ta\u id\':97497,\'partner\u id\':\'229547\',\'partner\u url\':\'ta\u id\':97832,\'partner\u id\':\'id34234\',\'partner\u url\':\' 有没有一种方法,使用LINQ或RegEx,我可以解析出合作伙伴的id?因此,我最终得到了一个列表对象,其中包含: 229547 id34234 感谢您的帮助,如果您的链接始终具有合作

我的C#模型中有一个字符串填充了以下字符串:

“[{\'ta\u id\':97497,\'partner\u id\':\'229547\',\'partner\u url\':\'ta\u id\':97832,\'partner\u id\':\'id34234\',\'partner\u url\':\'

有没有一种方法,使用LINQ或RegEx,我可以解析出合作伙伴的id?因此,我最终得到了一个列表对象,其中包含:

229547
id34234

感谢您的帮助,如果您的链接始终具有合作伙伴id,请标记-

   string Name = "[{\"ta_id\":97497,\"partner_id\":\"229547\",\"partner_url\":\"http://partner.com/deeplink/to/229547\"},{\"ta_id\":97832,\"partner_id\":\"id34234\",\"partner_url\":\"http://partner.com/deeplink/to/id34234\"}]";

        string[] splittedString = Regex.Split(Name, "}");
        List<string> allIds = new List<string>();
        foreach (var i in splittedString)
        { 
            var ids =Regex.Split(i, "/");
            string id = ids[ids.Length - 1];
            allIds.Add(id);
        }
string Name=“[{\'ta\u id\”:97497,\'partner\u id\:\“229547\”,\'partner\u url\:\”http://partner.com/deeplink/to/229547\“},{\'ta\u id\':97832,\'partner\u id\':\'id34234\',\'partner\u url\':\”http://partner.com/deeplink/to/id34234\"}]";
string[]splittedString=Regex.Split(名称“}”);
List allIds=新列表();
foreach(splittedString中的变量i)
{ 
var id=Regex.Split(i,“/”);
字符串id=ids[ids.Length-1];
添加(id);
}

假设您的链接始终具有合作伙伴id-

   string Name = "[{\"ta_id\":97497,\"partner_id\":\"229547\",\"partner_url\":\"http://partner.com/deeplink/to/229547\"},{\"ta_id\":97832,\"partner_id\":\"id34234\",\"partner_url\":\"http://partner.com/deeplink/to/id34234\"}]";

        string[] splittedString = Regex.Split(Name, "}");
        List<string> allIds = new List<string>();
        foreach (var i in splittedString)
        { 
            var ids =Regex.Split(i, "/");
            string id = ids[ids.Length - 1];
            allIds.Add(id);
        }
string Name=“[{\'ta\u id\”:97497,\'partner\u id\:\“229547\”,\'partner\u url\:\”http://partner.com/deeplink/to/229547\“},{\'ta\u id\':97832,\'partner\u id\':\'id34234\',\'partner\u url\':\”http://partner.com/deeplink/to/id34234\"}]";
string[]splittedString=Regex.Split(名称“}”);
List allIds=新列表();
foreach(splittedString中的变量i)
{ 
var id=Regex.Split(i,“/”);
字符串id=ids[ids.Length-1];
添加(id);
}

我从未使用过任何JSON解析器,但如果使用Regex,您可以尝试以下方法:

private static void regexString()
{
    string myString = "[{\"ta_id\":97497,\"partner_id\":\"229547\",\"partner_url\":\"http://partner.com/deeplink/to/229547\"},{\"ta_id\":97832,\"partner_id\":\"id34234\",\"partner_url\":\"http://partner.com/deeplink/to/id34234\"}]";

    string[] stringList = Regex.Split(myString, "},{");

    for (int i=0; i<stringList.Length ;i++)
    {
        stringList[i] = Regex.Split(Regex.Split(stringList[i], "partner_id\\\":\\\"")[1], "\\\",\\\"partner_url\\\"")[0];
    }
}
class Foo
{
    public string partner_id
    {
        get;
        set;
    }
}

...

JavaScriptSerializer j = new JavaScriptSerializer();
string[] ids = j.Deserialize<Foo[]>(s).Select(x => x.partner_id).ToArray();
private static void regexString()
{
string myString=“[{\'ta\u id\”:97497,\'partner\u id\:\'229547\,\'partner\u url\:\”http://partner.com/deeplink/to/229547\“},{\'ta\u id\':97832,\'partner\u id\':\'id34234\',\'partner\u url\':\”http://partner.com/deeplink/to/id34234\"}]";
string[]stringList=Regex.Split(myString,“},{”);

对于(int i=0;i我从未使用过任何JSON解析器,但如果涉及到正则表达式,您可以尝试以下方法:

private static void regexString()
{
    string myString = "[{\"ta_id\":97497,\"partner_id\":\"229547\",\"partner_url\":\"http://partner.com/deeplink/to/229547\"},{\"ta_id\":97832,\"partner_id\":\"id34234\",\"partner_url\":\"http://partner.com/deeplink/to/id34234\"}]";

    string[] stringList = Regex.Split(myString, "},{");

    for (int i=0; i<stringList.Length ;i++)
    {
        stringList[i] = Regex.Split(Regex.Split(stringList[i], "partner_id\\\":\\\"")[1], "\\\",\\\"partner_url\\\"")[0];
    }
}
class Foo
{
    public string partner_id
    {
        get;
        set;
    }
}

...

JavaScriptSerializer j = new JavaScriptSerializer();
string[] ids = j.Deserialize<Foo[]>(s).Select(x => x.partner_id).ToArray();
private static void regexString()
{
string myString=“[{\'ta\u id\”:97497,\'partner\u id\:\'229547\,\'partner\u url\:\”http://partner.com/deeplink/to/229547\“},{\'ta\u id\':97832,\'partner\u id\':\'id34234\',\'partner\u url\':\”http://partner.com/deeplink/to/id34234\"}]";
string[]stringList=Regex.Split(myString,“},{”);

对于(inti=0;i如果这是字符串的一般格式,那么这个正则表达式应该可以工作

(?i)(?<=(partner_id).{5})\w+
(?i)
=病例不敏感


(?如果这是字符串的一般格式,那么这个正则表达式应该可以工作

(?i)(?<=(partner_id).{5})\w+
(?i)
=病例不敏感


(?由于这是JSON,您可能不应该费心让正则表达式工作。相反,您可以解析JSON,然后使用LINQ

using System.Web.Script.Serialization; // (in System.Web.Extensions.dll)

...

string s = "[{\"ta_id\":97497,\"partner_id\":\"229547\",\"partner_url\":\"http://partner.com/deeplink/to/229547\"},{\"ta_id\":97832,\"partner_id\":\"id34234\",\"partner_url\":\"http://partner.com/deeplink/to/id34234\"}]";
JavaScriptSerializer j = new JavaScriptSerializer();
object[] objects = (object[])j.DeserializeObject(s);
string[] ids = objects.Cast<Dictionary<string, object>>()
                      .Select(dict => (string)dict["partner_id"])
                      .ToArray();
使用System.Web.Script.Serialization;//(在System.Web.Extensions.dll中)
...
字符串s=“[{\”ta\U id\”:97497,“合作伙伴\U id\”:“229547\”,“合作伙伴\U url\”:\”http://partner.com/deeplink/to/229547\“},{\'ta\u id\':97832,\'partner\u id\':\'id34234\',\'partner\u url\':\”http://partner.com/deeplink/to/id34234\"}]";
JavaScriptSerializer j=新的JavaScriptSerializer();
对象[]对象=(对象[])j.反序列化对象;
字符串[]id=objects.Cast()
.选择(dict=>(字符串)dict[“合作伙伴id”])
.ToArray();
将其反序列化为对象有点混乱,因为您没有任何类型信息。如果您不怕创建一个小类进行反序列化,可以执行以下操作:

private static void regexString()
{
    string myString = "[{\"ta_id\":97497,\"partner_id\":\"229547\",\"partner_url\":\"http://partner.com/deeplink/to/229547\"},{\"ta_id\":97832,\"partner_id\":\"id34234\",\"partner_url\":\"http://partner.com/deeplink/to/id34234\"}]";

    string[] stringList = Regex.Split(myString, "},{");

    for (int i=0; i<stringList.Length ;i++)
    {
        stringList[i] = Regex.Split(Regex.Split(stringList[i], "partner_id\\\":\\\"")[1], "\\\",\\\"partner_url\\\"")[0];
    }
}
class Foo
{
    public string partner_id
    {
        get;
        set;
    }
}

...

JavaScriptSerializer j = new JavaScriptSerializer();
string[] ids = j.Deserialize<Foo[]>(s).Select(x => x.partner_id).ToArray();
class-Foo
{
公共字符串伙伴id
{
得到;
设置
}
}
...
JavaScriptSerializer j=新的JavaScriptSerializer();
字符串[]id=j.Deserialize(s)。选择(x=>x.partner_id).ToArray();

请注意,反序列化JSON还有其他选项。我只是选择了内置的最通用的选项。

由于这是JSON,您可能不应该费心尝试让正则表达式工作。相反,您可以解析JSON,然后使用LINQ

using System.Web.Script.Serialization; // (in System.Web.Extensions.dll)

...

string s = "[{\"ta_id\":97497,\"partner_id\":\"229547\",\"partner_url\":\"http://partner.com/deeplink/to/229547\"},{\"ta_id\":97832,\"partner_id\":\"id34234\",\"partner_url\":\"http://partner.com/deeplink/to/id34234\"}]";
JavaScriptSerializer j = new JavaScriptSerializer();
object[] objects = (object[])j.DeserializeObject(s);
string[] ids = objects.Cast<Dictionary<string, object>>()
                      .Select(dict => (string)dict["partner_id"])
                      .ToArray();
使用System.Web.Script.Serialization;//(在System.Web.Extensions.dll中)
...
字符串s=“[{\”ta\U id\”:97497,“合作伙伴\U id\”:“229547\”,“合作伙伴\U url\”:\”http://partner.com/deeplink/to/229547\“},{\'ta\u id\':97832,\'partner\u id\':\'id34234\',\'partner\u url\':\”http://partner.com/deeplink/to/id34234\"}]";
JavaScriptSerializer j=新的JavaScriptSerializer();
对象[]对象=(对象[])j.反序列化对象;
字符串[]id=objects.Cast()
.选择(dict=>(字符串)dict[“合作伙伴id”])
.ToArray();
将其反序列化为对象有点混乱,因为您没有任何类型信息。如果您不怕创建一个小类进行反序列化,可以执行以下操作:

private static void regexString()
{
    string myString = "[{\"ta_id\":97497,\"partner_id\":\"229547\",\"partner_url\":\"http://partner.com/deeplink/to/229547\"},{\"ta_id\":97832,\"partner_id\":\"id34234\",\"partner_url\":\"http://partner.com/deeplink/to/id34234\"}]";

    string[] stringList = Regex.Split(myString, "},{");

    for (int i=0; i<stringList.Length ;i++)
    {
        stringList[i] = Regex.Split(Regex.Split(stringList[i], "partner_id\\\":\\\"")[1], "\\\",\\\"partner_url\\\"")[0];
    }
}
class Foo
{
    public string partner_id
    {
        get;
        set;
    }
}

...

JavaScriptSerializer j = new JavaScriptSerializer();
string[] ids = j.Deserialize<Foo[]>(s).Select(x => x.partner_id).ToArray();
class-Foo
{
公共字符串伙伴id
{
得到;
设置
}
}
...
JavaScriptSerializer j=新的JavaScriptSerializer();
字符串[]id=j.Deserialize(s)。选择(x=>x.partner_id).ToArray();

请注意,反序列化JSON还有其他选项。我只是选择了内置的最通用的选项。

看起来像JSON字符串,因此您可以使用将其解析为类。您还可以看看这个流行的JSON序列化程序:@musefan,下面是一个很好的示例Hi-DataContractJsonSerializer属于什么类ng in?我使用的是Visual Studio,通常的Ctl+没有提供任何选项。我已经从nuget安装了Newtonsoft.Json。谢谢,MarkThat看起来像一个Json字符串,因此您可以使用将其解析为一个类。您还可以看看这个流行的Json序列化程序:@musefan,这里有一个很好的示例:DataContractJ是什么类sonSerializer是否属于?我正在使用Visual Studio,通常的Ctl+没有提供任何选项。我已从nuget安装了Newtonsoft.Json。感谢您,Mark@+1的优化,是时候让我学习
lookback
更多。。。