C# LINQ或REGEX从字符串中提取特定文本
我的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?因此,我最终得到了一个列表对象,其中包含: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 感谢您的帮助,如果您的链接始终具有合作
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
更多。。。