我有几个分隔符。例如{del1,del2,del3}。 假设我有文本:Text1 del1 text2 del2 text3 del3
我想以这种方式分割字符串:
当数组的每个元素都是texti deli时,我需要获取字符串数组。 我怎么能在C#中做到这一点?
答案 0 :(得分:7)
String.Split
允许多个拆分分隔符。我不知道这是否适合你的问题。
示例:
String text = "Test;Test1:Test2#Test3";
var split = text.Split(';', ':', '#');
//split contains an array of "Test", "Test1", "Test2", "Test3"
编辑:您可以使用正则表达式来保留分隔符。
String text = "Test;Test1:Test2#Test3";
var split = Regex.Split(text, @"(?<=[;:#])");
// contains "Test;", "Test1:", "Test2#","Test3"
答案 1 :(得分:2)
这应该可以解决问题:
const string input = "text1-text2;text3-text4-text5;text6--";
const string matcher= "(-|;)";
string[] substrings = Regex.Split(input, matcher);
StringBuilder builder = new StringBuilder();
foreach (string entry in substrings)
{
builder.Append(entry);
}
Console.Out.WriteLine(builder.ToString());
请注意,您将在子字符串数组中收到空字符串,以查找最后两个' - '; s的匹配项,您可以选择忽略或使用这些值执行您喜欢的操作。
答案 2 :(得分:1)
如果要在拆分字符串时保留分隔符,可以使用以下命令:
string[] delimiters = { "del1", "del2", "del3" };
string input = "text1del1text2del2text3del3";
string[] parts = input.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
for(int index = 0; index < parts.Length; index++)
{
string part = parts[index];
string temp = input.Substring(input.IndexOf(part) + part.Length);
foreach (string delimter in delimiters)
{
if ( temp.IndexOf(delimter) == 0)
{
parts[index] += delimter;
break;
}
}
}
parts
将成为:
[0] "text1del1"
[1] "text2del2"
[2] "text3del3"
答案 3 :(得分:1)
你可以使用正则表达式。对于像这样的字符串“text1; text2 | text3 ^”,您可以使用:
(.*;|.*\||.*\^)
只需为每个分隔符添加更多替代模式。
答案 4 :(得分:1)
正如@Matt Burland建议的那样,使用正则表达式
List<string> values = new List<string>();
string s = "abc123;def456-hijk,";
Regex r = new Regex(@"(.*;|.*-|.*,)");
foreach(Match m in r.Matches(s))
values.Add(m.Value);