C# 从字符串中提取子字符串
我有一个字符串变量,它的值如下C# 从字符串中提取子字符串,c#,C#,我有一个字符串变量,它的值如下 string hello = "Endpoint: Efficacy, Intervene: Single Group, Mask: Open, Purpose: Treatment"; 当我从XML中提取时,端点,干预,屏蔽和目的仍然存在 相同,但其值可以更改。 我想将此端点、干预、屏蔽和目的分别存储在不同的变量中。如果模式已修复,将非常感谢您的帮助。如果模式已修复,这将对您有所帮助 string hello = "Endpoint: Efficacy, In
string hello = "Endpoint: Efficacy, Intervene: Single Group, Mask: Open, Purpose: Treatment";
当我从XML中提取时,端点
,干预
,屏蔽
和目的
仍然存在
相同,但其值可以更改。
我想将此
端点
、干预
、屏蔽
和目的
分别存储在不同的变量中。如果模式已修复,将非常感谢您的帮助。如果模式已修复,这将对您有所帮助
string hello = "Endpoint: Efficacy, Intervene: Single Group, Mask: Open, Purpose: Treatment";
string[] packs = hello.Split(',');
var data = packs.ToDictionary(k => k.Split(':').First().Trim(), v => v.Split(':').Last().Trim());
如果模式是固定的,这可以帮助您
string hello = "Endpoint: Efficacy, Intervene: Single Group, Mask: Open, Purpose: Treatment";
string[] packs = hello.Split(',');
var data = packs.ToDictionary(k => k.Split(':').First().Trim(), v => v.Split(':').Last().Trim());
使用
字典尝试这种方法
string hello = "Endpoint: Efficacy, Intervene: Single Group, Mask: Open, Purpose: Treatment";
Dictionary<string, string> result = new Dictionary<string, string>();
var s1 = hello.Split(',');
foreach (var s in s1)
{
var v = s.Split(':');
result.Add(v[0].Trim(), v[1].Trim());
}
foreach (var a in result)
{
Console.WriteLine(a.Key +" " + a.Value);
}
使用字典尝试这种方法
string hello = "Endpoint: Efficacy, Intervene: Single Group, Mask: Open, Purpose: Treatment";
Dictionary<string, string> result = new Dictionary<string, string>();
var s1 = hello.Split(',');
foreach (var s in s1)
{
var v = s.Split(':');
result.Add(v[0].Trim(), v[1].Trim());
}
foreach (var a in result)
{
Console.WriteLine(a.Key +" " + a.Value);
}
首先将字符串拆分为,
,然后再拆分为:
,并将结果保存在字典中:
public class Program
{
public static void Main(string[] args)
{
string hello = "Endpoint: Efficacy, Intervene: Single Group, Mask: Open, Purpose: Treatment";
string[] arr = hello.Split(',');
Dictionary<string, string> result = new Dictionary<string, string>();
foreach(string s in arr)
{
string[] keyValuePair = s.Split(':');
result[keyValuePair[0].Replace(" ","")] = keyValuePair[1].Replace(" ","");
}
foreach(var v in result)
{
Console.WriteLine(v.Key + " : " + v.Value );
}
}
}
公共类程序
{
公共静态void Main(字符串[]args)
{
string hello=“终点:疗效,干预:单组,面罩:开放,目的:治疗”;
字符串[]arr=hello.Split(',');
字典结果=新字典();
foreach(arr中的字符串s)
{
字符串[]keyValuePair=s.Split(“:”);
结果[keyValuePair[0]。替换(“,”)]=keyValuePair[1]。替换(“,”);
}
foreach(结果中的var v)
{
控制台写入线(v.Key+“:”+v.Value);
}
}
}
首先将字符串拆分为,
,然后再拆分为:
,并将结果保存在字典中:
public class Program
{
public static void Main(string[] args)
{
string hello = "Endpoint: Efficacy, Intervene: Single Group, Mask: Open, Purpose: Treatment";
string[] arr = hello.Split(',');
Dictionary<string, string> result = new Dictionary<string, string>();
foreach(string s in arr)
{
string[] keyValuePair = s.Split(':');
result[keyValuePair[0].Replace(" ","")] = keyValuePair[1].Replace(" ","");
}
foreach(var v in result)
{
Console.WriteLine(v.Key + " : " + v.Value );
}
}
}
公共类程序
{
公共静态void Main(字符串[]args)
{
string hello=“终点:疗效,干预:单组,面罩:开放,目的:治疗”;
字符串[]arr=hello.Split(',');
字典结果=新字典();
foreach(arr中的字符串s)
{
字符串[]keyValuePair=s.Split(“:”);
结果[keyValuePair[0]。替换(“,”)]=keyValuePair[1]。替换(“,”);
}
foreach(结果中的var v)
{
控制台写入线(v.Key+“:”+v.Value);
}
}
}
我想出了一些更具动态性的方法,以防有人需要处理可变关键字来匹配
首先提取关键字并构建匹配的模式。然后按名称捕获匹配项,每个捕获组以关键字命名,以便我们可以按关键字访问它们:
var input = "Endpoint: Efficacy, Intervene: Single Group, Mask: Open, Purpose: Treatment";
//extract keywords: (word followed by ':' )
var keywords = Regex.Matches( input, @"(\w*):" ).Cast<Match>()
.Select( m => m.Groups[ 1 ].Value );
//build the pattern to match (create capture groups named as keywords)
var pattern = String.Join( ", ", keywords.Select(
k => k + $@": (?<{k}>(\w*\s*)*)" ) );
var matches = Regex.Matches( input, pattern );
//access groups by keyword
foreach( var keyword in keywords )
Console.WriteLine( matches[ 0 ].Groups[ keyword ].Value );
var input=“终点:疗效,干预:单组,面罩:开放,目的:治疗”;
//提取关键词:(单词后跟“:”)
var keywords=Regex.Matches(输入,@“(\w*):”).Cast()
.Select(m=>m.Groups[1].Value);
//构建匹配的模式(创建以关键字命名的捕获组)
var pattern=String.Join(“,”,关键字。选择(
k=>k+$@:((\w*\s*)*)”;
var matches=Regex.matches(输入,模式);
//按关键字访问组
foreach(关键字中的var关键字)
Console.WriteLine(匹配[0]。组[keyword]。值);
我想出了一些更具动态性的方法,以防有人需要处理可变关键字来匹配
首先提取关键字并构建匹配的模式。然后按名称捕获匹配项,每个捕获组以关键字命名,以便我们可以按关键字访问它们:
var input = "Endpoint: Efficacy, Intervene: Single Group, Mask: Open, Purpose: Treatment";
//extract keywords: (word followed by ':' )
var keywords = Regex.Matches( input, @"(\w*):" ).Cast<Match>()
.Select( m => m.Groups[ 1 ].Value );
//build the pattern to match (create capture groups named as keywords)
var pattern = String.Join( ", ", keywords.Select(
k => k + $@": (?<{k}>(\w*\s*)*)" ) );
var matches = Regex.Matches( input, pattern );
//access groups by keyword
foreach( var keyword in keywords )
Console.WriteLine( matches[ 0 ].Groups[ keyword ].Value );
var input=“终点:疗效,干预:单组,面罩:开放,目的:治疗”;
//提取关键词:(单词后跟“:”)
var keywords=Regex.Matches(输入,@“(\w*):”).Cast()
.Select(m=>m.Groups[1].Value);
//构建匹配的模式(创建以关键字命名的捕获组)
var pattern=String.Join(“,”,关键字。选择(
k=>k+$@:((\w*\s*)*)”;
var matches=Regex.matches(输入,模式);
//按关键字访问组
foreach(关键字中的var关键字)
Console.WriteLine(匹配[0]。组[keyword]。值);
您应该将XML反序列化为与变量匹配的对象。@MarcelTheis他仍然应该分析该文本您应该将XML反序列化为与变量匹配的对象。@MarcelTheis他仍然应该分析该文本,并且可以在关键点上添加修剪。在后面的项目前面有一个额外的空间。但这是最干净、易读的解决方案。在那里,你也可以在钥匙上添加装饰。在后面的项目前面有一个额外的空间。但这是最干净、可读的解决方案。