按列表拆分字符串: 我有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
,但它不是城市名称。
答案 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]);