Подтвердить что ты не робот

Как разбить строку, игнорируя случай разделителя?

Мне нужно разбить строку, чтобы сказать "asdf aA asdfget aa uoiu AA" split, используя "aa", игнорируя случай. к

"asdf "
"asdfget "
"uoiu "
4b9b3361

Ответ 1

Нет простого способа выполнить это, используя string.Split. (Ну, за исключением указания всех перестановок разделенной строки для каждого char нижнего/верхнего регистра в массиве - не очень элегантный, я думаю, вы согласитесь.)

Однако Regex.Split должен выполнять работу довольно хорошо.

Пример:

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

Ответ 2

В вашем алгоритме вы можете использовать метод String.IndexOf и передать в OrdinalIgnoreCase значение параметра StringComparison.

Ответ 3

Если вам неинтересно случай, тогда самое простое - заставить строку заглавными или строчными буквами перед использованием split.

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

Если вам интересны случайные биты строки, но не разделители, я бы использовал String.Replace, чтобы заставить все разделители к конкретному случаю (верхнему или нижнему, не важно), а затем вызвать String. Разделите, используя подходящий регистр для разделителя.

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

Ответ 4

Мой ответ не так хорош, как 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);
}

Ответ 5

Это не версия pretties, но также работает:

"asdf aA asdfget aa uoiu AA".Split(new[] { "aa", "AA", "aA", "Aa" }, StringSplitOptions.RemoveEmptyEntries);

Ответ 6

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