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他仍然应该分析该文本,并且可以在关键点上添加修剪。在后面的项目前面有一个额外的空间。但这是最干净、易读的解决方案。在那里,你也可以在钥匙上添加装饰。在后面的项目前面有一个额外的空间。但这是最干净、可读的解决方案。