Ho bisogno di dividere una stringa diciamo "asdf aA asdfget aa uoiu AA" diviso usando "aa" ignorando il caso. aCome dividere una stringa ignorando il caso del delimitatore?
"asdf "
"asdfget "
"uoiu "
Ho bisogno di dividere una stringa diciamo "asdf aA asdfget aa uoiu AA" diviso usando "aa" ignorando il caso. aCome dividere una stringa ignorando il caso del delimitatore?
"asdf "
"asdfget "
"uoiu "
Non esiste un modo semplice per eseguire ciò utilizzando string.Split
. (Beh, eccetto per specificare tutte le permutazioni della stringa suddivisa per ogni carattere maiuscolo/minuscolo in un array - non molto elegante, credo che sarete d'accordo.)
Tuttavia, il Regex.Split
dovrebbe fare il lavoro abbastanza bene.
Esempio:
var parts = Regex.Split(input, "aa", RegexOptions.IgnoreCase);
Nel vostro algoritmo, è possibile utilizzare il metodo String.IndexOf e passare OrdinalIgnoreCase come parametro StringComparison.
Quindi non c'è modo di sfruttare String.Split? – jdelator
La mia risposta non è valida come Noldorin's, ma la lascerò in modo che le persone possano vedere il metodo alternativo. Ciò non è ottimale per le suddivisioni semplici, ma è più flessibile se è necessario eseguire analisi più complesse.
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);
}
Se non si cura di caso, allora la cosa più semplice da fare è forzare la stringa in maiuscolo o minuscolo prima di utilizzare scissione.
stringbits = datastring.ToLower().Split("aa")
Se vi preoccupate per caso per i bit interessanti della stringa, ma non i separatori quindi vorrei usare String.Replace per forzare tutti i separatori ad un caso specifico (superiore o inferiore, non importa) e quindi chiama String.Split utilizzando il caso corrispondente per il separatore.
strinbits = datastring.Replace("aA", "aa").Replace("AA", "aa").Split("aa")
Non è la versione pretties ma funziona anche:
"asdf aA asdfget aa uoiu AA".Split(new[] { "aa", "AA", "aA", "Aa" }, StringSplitOptions.RemoveEmptyEntries);
Sì, questo è ciò che intendevo per permutazione: diventa piuttosto ingombrante per stringhe più lunghe. – Noldorin
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;
}
quindi utilizzare questa funzione come muggito
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);
}
Plus1 per non usare parole vere ma ancora mantenimento della continuità della domanda – user1