按列表

时间:2016-12-14 08:11:32

标签: c# string split

按列表拆分字符串: 我有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);

我有&#34; str&#34;结果; 但是如何跳过这个结果呢?我希望在这种情况下得到空数组(当delim是单词的一部分时)。 我希望,当formattedText="str xx"时,结果为str

编辑: 我有很多地址的分隔符:例如street,city,town等。 我尝试得到如下字符串:city DC - &gt; DC。 但是,当我得到一个词:cityacdc - &gt;我得到acdc,但它不是城市名称。

2 个答案:

答案 0 :(得分:1)

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

//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;
}

答案 1 :(得分:1)

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

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();
}

这将处理这种情况:

  

我尝试得到如下字符串:城市DC - &gt; DC

处理您想要在关键字前找到该字词的情况:

  

我希望,当formattedText =“str xx”时,结果是str

只需切换匹配条件的位置:

string s = Regex.Match(formattedText, @"\b\w+\s"+ del).Value;

并获取分割中的第一个元素

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