如何在忽略分隔符的情况下拆分字符串?

我需要拆分一个字符串让我们说“asdf aA asdfget aa uoiu AA”拆分使用“aa”忽略这个案例。 至

"asdf " "asdfget " "uoiu " 

使用string.Split没有简单的方法来实现这string.Split 。 (好吧,除了为数组中的每个字符大小写/大写字母指定拆分字符串的所有排列 – 不是很优雅我认为你会同意。)

但是, Regex.Split应该可以很好地完成这项工作。

例:

 var parts = Regex.Split(input, "aa", RegexOptions.IgnoreCase); 

如果您不关心大小写,那么最简单的方法是在使用split之前将字符串强制为全大写或小写。

 stringbits = datastring.ToLower().Split("aa") 

如果您关心字符串的有趣位而不是分隔符的情况,那么我将使用String.Replace强制所有分隔符到特定的大小写(大写或小写,无关紧要),然后调用String.Split使用匹配分隔符的大小写。

 strinbits = datastring.Replace("aA", "aa").Replace("AA", "aa").Split("aa") 

在您的算法中,您可以使用String.IndexOf方法并将OrdinalIgnoreCase作为StringComparison参数传递。

我的答案不如Noldorin那么好,但我会留下它让人们可以看到替代方法。 这对于简单的拆分不太好,但如果您需要进行更复杂的解析,它会更灵活。

 using System.Text.RegularExpressions; string data = "asdf aA asdfget aa uoiu AA"; string aaRegex = "(.+?)[aA]{2}"; MatchCollection mc = Regex.Matches(data, aaRegex); foreach(Match m in mc) { Console.WriteLine(m.Value); } 

这不是pretties版本,但也有效:

 "asdf aA asdfget aa uoiu AA".Split(new[] { "aa", "AA", "aA", "Aa" }, StringSplitOptions.RemoveEmptyEntries); 
  public static List _Split(this string input,string[] splt) { List _Result=new List(); foreach(string _splt in splt) { if (splt.Count() == 1) { _Result.AddRange(Regex.Split(input, _splt, RegexOptions.IgnoreCase).ToList()); } else { List NewStr = Regex.Split(input, _splt, RegexOptions.IgnoreCase).ToList(); foreach(string _NewStr in NewStr) { List NewSplt = splt.ToList(); NewSplt.Remove(_splt); return _Split(_NewStr, NewSplt.ToArray()); } } } return _Result; } 

然后使用此function如下所示

 public frmThematicConversation() { InitializeComponent(); string str = "abcdefghabcfadcbf"; string[] splt = { "a", "b" }; List _result = str._Split(splt); }