C# 按列表拆分字符串

C# 按列表拆分字符串,c#,string,split,C#,String,Split,按列表拆分字符串: 我有带delimeters的SplitColl: xx yy .. .. 像这样的字符串: strxx 当我尝试拆分字符串时: var formattedText = "strxx"; var lst = new List<String>(); lst.Add("xx"); lst.Add("yy"); var arr = formattedText.Split(lst.ToArray(), 10, StringSplitOpt

按列表拆分字符串: 我有带delimeters的SplitColl:

xx 
yy
..
..
像这样的字符串:

strxx
当我尝试拆分字符串时:

   var formattedText = "strxx";
   var lst = new List<String>();
   lst.Add("xx");
   lst.Add("yy");
   var arr = formattedText.Split(lst.ToArray(), 10, StringSplitOptions.RemoveEmptyEntries);
var formattedText=“strxx”;
var lst=新列表();
第1条添加(“xx”);
第一次添加(“yy”);
var arr=formattedText.Split(lst.ToArray(),10,StringSplitOptions.RemoveEmptyEntries);
我有“str”结果; 但是如何跳过这个结果呢?在这种情况下,我希望得到空数组(当delim是单词的一部分时)。 我希望,当
formattedText=“str xx”
时,结果是
str

编辑: 我有许多地址表:如街道、城市、城镇等。 我尝试得到如下字符串:
city DC
->DC。
但是,当我得到一个像:
cityacdc
->这样的词时,我得到了
acdc
,但它不是一个城市的名称。

试试看,基本上我要做的是首先从格式化文本字符串中删除任何前导或尾随分隔符(仅当它们用空格分隔时)。然后使用剩余的字符串将其拆分为每个分隔符(如果两边都有空格)

//usage
var result = FormatText(formattedText, delimiterlst);


//code
static string[] FormatText(string input, List<string> delimiters)
{
    delimiters.ForEach(d => {
        TrimInput(ref input, "start", d.ToCharArray());
        TrimInput(ref input, "end", d.ToCharArray());
    });
    return input.Split(delimiters.Select(d => $" {d} ").ToArray(), 10, StringSplitOptions.RemoveEmptyEntries);
}
static void TrimInput(ref string input, string pos, char[] delimiter)
{
    //backup
    string temp = input;

    //trim
    input = (pos == "start") ? input.TrimStart(delimiter) : input.TrimEnd(delimiter);
    string trimmed = (pos == "start") ? input.TrimStart() : input.TrimEnd();

    //update string
    input = (input != trimmed) ? trimmed : temp;
}
//用法
var result=FormatText(formattedText,delimiterlst);
//代码
静态字符串[]格式文本(字符串输入,列表分隔符)
{
分隔符。ForEach(d=>{
TrimInput(参考输入,“开始”,d.ToCharArray());
TrimInput(参考输入,“结束”,d.ToCharArray());
});
返回input.Split(delimiters.Select(d=>$“{d}”).ToArray(),10,StringSplitOptions.RemoveEmptyEntries);
}
静态输入(参考字符串输入、字符串位置、字符[]分隔符)
{
//备份
字符串温度=输入;
//修剪
input=(pos==“start”)?input.TrimStart(分隔符):input.trimsend(分隔符);
字符串trimmed=(pos==“start”)?input.TrimStart():input.TrimEnd();
//更新字符串
输入=(输入!=修剪)?修剪:温度;
}

尝试一下,基本上我要做的是首先从格式化文本字符串中删除任何前导或尾随分隔符(仅当它们用空格分隔时)。然后使用剩余的字符串将其拆分为每个分隔符(如果两边都有空格)

//usage
var result = FormatText(formattedText, delimiterlst);


//code
static string[] FormatText(string input, List<string> delimiters)
{
    delimiters.ForEach(d => {
        TrimInput(ref input, "start", d.ToCharArray());
        TrimInput(ref input, "end", d.ToCharArray());
    });
    return input.Split(delimiters.Select(d => $" {d} ").ToArray(), 10, StringSplitOptions.RemoveEmptyEntries);
}
static void TrimInput(ref string input, string pos, char[] delimiter)
{
    //backup
    string temp = input;

    //trim
    input = (pos == "start") ? input.TrimStart(delimiter) : input.TrimEnd(delimiter);
    string trimmed = (pos == "start") ? input.TrimStart() : input.TrimEnd();

    //update string
    input = (input != trimmed) ? trimmed : temp;
}
//用法
var result=FormatText(formattedText,delimiterlst);
//代码
静态字符串[]格式文本(字符串输入,列表分隔符)
{
分隔符。ForEach(d=>{
TrimInput(参考输入,“开始”,d.ToCharArray());
TrimInput(参考输入,“结束”,d.ToCharArray());
});
返回input.Split(delimiters.Select(d=>$“{d}”).ToArray(),10,StringSplitOptions.RemoveEmptyEntries);
}
静态输入(参考字符串输入、字符串位置、字符[]分隔符)
{
//备份
字符串温度=输入;
//修剪
input=(pos==“start”)?input.TrimStart(分隔符):input.trimsend(分隔符);
字符串trimmed=(pos==“start”)?input.TrimStart():input.TrimEnd();
//更新字符串
输入=(输入!=修剪)?修剪:温度;
}

似乎您并没有真正将关键字用作分隔符,而是用作搜索标准。在这种情况下,您可以使用正则表达式来搜索每个模式。下面是一个示例程序来说明此过程:

static void Main(string[] args)
{
    List<string> delim = new List<string> { "city", "street" };

    string formattedText = "strxx street BakerStreet cityxx city London";

    List<string> results = new List<string>();

    foreach (var del in delim)
    {
        string s = Regex.Match(formattedText, del + @"\s\w+\b").Value;

        if (!String.IsNullOrWhiteSpace(s))
        {
            results.Add(s.Split(' ')[1]);
        }
    }            

    Console.WriteLine(String.Join("\n", results));
    Console.ReadKey();
}
然后在分割处取第一个元素

results.Add(s.Split(' ')[0]);

似乎您并没有真正将关键字用作分隔符,而是用作搜索条件。在这种情况下,您可以使用正则表达式来搜索每个模式。下面是一个示例程序来说明此过程:

static void Main(string[] args)
{
    List<string> delim = new List<string> { "city", "street" };

    string formattedText = "strxx street BakerStreet cityxx city London";

    List<string> results = new List<string>();

    foreach (var del in delim)
    {
        string s = Regex.Match(formattedText, del + @"\s\w+\b").Value;

        if (!String.IsNullOrWhiteSpace(s))
        {
            results.Add(s.Split(' ')[1]);
        }
    }            

    Console.WriteLine(String.Join("\n", results));
    Console.ReadKey();
}
然后在分割处取第一个元素

results.Add(s.Split(' ')[0]);

您可以只设置列表分隔符,如
lst.Add(“xx”);第1条添加(“xx”)
“我希望,当
formattedText=“str xx”
时,结果是
str
”在这种情况下,实际上您的delimeter是空格。你要找的是一个匹配条件“city DC->DC”。你想得到关键字后面的部分还是第一个例子中的前面的部分?我希望,当formattedText=“str xx”时,结果是str“您可以只设置列表分隔符,如
lst.Add(“xx”);第1条添加(“xx”)
“我希望,当
formattedText=“str xx”
时,结果是
str
”在这种情况下,实际上您的delimeter是空格。你要找的是一个匹配条件“city DC->DC”。你想得到关键字后面的部分还是第一个例子中的前面的部分?“我希望,当formattedText=“str xx”时,结果是str”