Tôi cần phải tách một chuỗi, giả sử "asdf aA asdfget aa uoiu AA" được phân tách bằng cách sử dụng "aa" bỏ qua trường hợp. đểLàm thế nào để tách một chuỗi trong khi bỏ qua trường hợp của dấu phân cách?
"asdf "
"asdfget "
"uoiu "
Tôi cần phải tách một chuỗi, giả sử "asdf aA asdfget aa uoiu AA" được phân tách bằng cách sử dụng "aa" bỏ qua trường hợp. đểLàm thế nào để tách một chuỗi trong khi bỏ qua trường hợp của dấu phân cách?
"asdf "
"asdfget "
"uoiu "
Không có cách nào dễ dàng để thực hiện việc này bằng cách sử dụng string.Split
. (Vâng, ngoại trừ việc chỉ định tất cả các hoán vị của chuỗi phân chia cho mỗi chữ cái viết hoa/chữ thường trong một mảng - không phải rất tao nhã, tôi nghĩ bạn sẽ đồng ý.)
Tuy nhiên, Regex.Split
nên thực hiện công việc khá độc đáo.
Ví dụ:
var parts = Regex.Split(input, "aa", RegexOptions.IgnoreCase);
Trong thuật toán của bạn, bạn có thể sử dụng phương pháp String.IndexOf và vượt qua trong OrdinalIgnoreCase như tham số StringComparison.
Vì vậy, không có cách nào để tận dụng lợi thế của String.Split? – jdelator
Câu trả lời của tôi không tốt bằng Noldorin's, nhưng tôi sẽ để nó để mọi người có thể thấy phương pháp thay thế. Điều này không tốt cho các phân chia đơn giản, nhưng nó linh hoạt hơn nếu bạn cần thực hiện phân tích cú pháp phức tạp hơn.
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);
}
Nếu bạn không quan tâm đến trường hợp, sau đó điều đơn giản nhất để làm là buộc các chuỗi cho tất cả các chữ hoa hoặc chữ thường trước khi sử dụng phân chia.
stringbits = datastring.ToLower().Split("aa")
Nếu bạn quan tâm đến trường hợp của các bit thú vị của chuỗi nhưng không phải là tách thì tôi sẽ sử dụng String.Replace để buộc tất cả các dải phân cách để một trường hợp cụ thể (trên hoặc dưới, không quan trọng) và sau đó gọi String.Split bằng cách sử dụng trường hợp phù hợp cho dấu phân cách.
strinbits = datastring.Replace("aA", "aa").Replace("AA", "aa").Split("aa")
Đây không phải là phiên bản người đẹp mà còn hoạt động:
"asdf aA asdfget aa uoiu AA".Split(new[] { "aa", "AA", "aA", "Aa" }, StringSplitOptions.RemoveEmptyEntries);
Vâng, đây là những gì tôi có nghĩa là bởi hoán vị - nó trở nên khá cồng kềnh cho các chuỗi phân chia dài hơn. – 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;
}
sau đó sử dụng chức năng này như dưới đây
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 vì đã không sử dụng từ ngữ thật nhưng vẫn duy trì tính liên tục của câu hỏi – user1