Мне нужно разбить строку, чтобы сказать "asdf aA asdfget aa uoiu AA" split, используя "aa", игнорируя случай. к
"asdf "
"asdfget "
"uoiu "
Мне нужно разбить строку, чтобы сказать "asdf aA asdfget aa uoiu AA" split, используя "aa", игнорируя случай. к
"asdf "
"asdfget "
"uoiu "
Нет простого способа выполнить это, используя string.Split
. (Ну, за исключением указания всех перестановок разделенной строки для каждого char нижнего/верхнего регистра в массиве - не очень элегантный, я думаю, вы согласитесь.)
Однако Regex.Split
должен выполнять работу довольно хорошо.
Пример:
var parts = Regex.Split(input, "aa", RegexOptions.IgnoreCase);
В вашем алгоритме вы можете использовать метод String.IndexOf и передать в OrdinalIgnoreCase значение параметра StringComparison.
Если вам неинтересно случай, тогда самое простое - заставить строку заглавными или строчными буквами перед использованием split.
stringbits = datastring.ToLower().Split("aa")
Если вам интересны случайные биты строки, но не разделители, я бы использовал String.Replace, чтобы заставить все разделители к конкретному случаю (верхнему или нижнему, не важно), а затем вызвать String. Разделите, используя подходящий регистр для разделителя.
strinbits = datastring.Replace("aA", "aa").Replace("AA", "aa").Split("aa")
Мой ответ не так хорош, как Noldorin's, но я оставлю его, чтобы люди могли видеть альтернативный метод. Это не так хорошо для простых разделов, но это более гибко, если вам нужно выполнить более сложный синтаксический анализ.
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<string> _Split(this string input,string[] splt)
{
List<string> _Result=new List<string>();
foreach(string _splt in splt)
{
if (splt.Count() == 1)
{
_Result.AddRange(Regex.Split(input, _splt, RegexOptions.IgnoreCase).ToList());
}
else
{
List<string> NewStr = Regex.Split(input, _splt, RegexOptions.IgnoreCase).ToList();
foreach(string _NewStr in NewStr)
{
List<string> NewSplt = splt.ToList();
NewSplt.Remove(_splt);
return _Split(_NewStr, NewSplt.ToArray());
}
}
}
return _Result;
}
затем используйте эту функцию ниже:
public frmThematicConversation()
{
InitializeComponent();
string str = "a b c d e f g h a b c f a d c b f";
string[] splt = { "a", "b" };
List<string> _result = str._Split(splt);
}