2009-08-10 40 views
109

tôi gặp sự cố khi tách chuỗi trong C# bằng dấu phân tách "] [".string.split - bởi nhiều dấu phân cách ký tự

Ví dụ: chuỗi "abc] [rfd] [5] [,] [."

Nên tạo một mảng chứa;
abc
RFD
,
.

Nhưng tôi dường như không thể làm cho nó hoạt động, ngay cả khi tôi thử RegEx tôi không thể bị chia tách trên dấu phân tách.

EDIT: Về cơ bản tôi muốn giải quyết vấn đề này mà không cần biểu thức chính quy. Giải pháp mà tôi chấp nhận là;

string Delimiter = "]["; 
var Result[] = StringToSplit.Split(new[] { Delimiter }, StringSplitOptions.None); 

Tôi rất vui khi có thể giải quyết câu hỏi chia tách này.

+0

Bạn có thể đăng mã của mình không? –

+0

Hiển thị cho chúng tôi mã của bạn không thành công. –

+0

Ngoài ra, hãy đăng những gì bạn nhận được từ nó, ngoài những gì bạn đã đăng, những gì bạn muốn thoát ra khỏi nó. –

Trả lời

202

Để hiển thị cả string.SplitRegex sử dụng:

string input = "abc][rfd][5][,][."; 
string[] parts1 = input.Split(new string[] { "][" }, StringSplitOptions.None); 
string[] parts2 = Regex.Split(input, @"\]\["); 
+4

Hoặc nếu mã tối thiểu của bạn hậu môn như tôi: 'var parts1 = input.Split (new [] {"] ["}, StringSplitOptions.None);' –

+1

Lợi ích của việc cung cấp 'StringSplitOptions.None' trên' input.Split (chuỗi mới [] {"] ["}) 'là gì? – seebiscuit

+0

Điều này giả định rằng, có cả hai nhân vật phải không? Điều gì sẽ xảy ra nếu tôi muốn chia nhỏ bằng "[" hoặc "]"? Từ các thử nghiệm của tôi cho đến nay tôi đoán đó là một câu chuyện khác nhau, phải không? – C4u

23
string tests = "abc][rfd][5][,][."; 
string[] reslts = tests.Split(new char[] { ']', '[' }, StringSplitOptions.RemoveEmptyEntries); 
+4

Lưu ý rằng cách tiếp cận này giả định anh ta có nghĩa là chia nhỏ trên mỗi] và [, ngay cả khi chúng không xuất hiện trong] [kết hợp. –

+2

Sự quá tải chuỗi đó. Việc xử lý nó là 2 dấu tách riêng biệt - đơn giản là bạn đang loại bỏ phần còn lại. Có một quá tải chấp nhận một chuỗi như một dấu phân cách (thực ra là một chuỗi các chuỗi) - vì vậy bạn không phải loại bỏ các giá trị rỗng (nghĩa là: bạn có thể ** tìm các giá trị rỗng khi chúng tồn tại một cách hợp lệ trong dữ liệu) –

+0

Giả định của bạn là [đúng. Anh ta không chỉ định, vì vậy tôi đã cho anh ta một cái gì đó mà sẽ làm việc cho ví dụ của mình. Nếu anh ta không muốn bỏ qua, thì sẽ làm việc. Nhưng nếu không có thêm thông tin, chúng tôi sẽ không bao giờ biết – SwDevMan81

2
Regex.Split("abc][rfd][5][,][.", @"\]\]"); 
+7

Bạn có thể muốn một '\ [' trong đó ở đâu đó ... –

11

Một tùy chọn khác:

Thay thế chuỗi delimiter với một nhân vật duy nhất, sau đó chia vào nhân vật đó.

string input = "abc][rfd][5][,][."; 
string[] parts1 = input.Replace("][","-").Split('-'); 
+1

Đây là những gì tôi làm. Nó mang lại cho tôi một phương pháp chung, chuẩn hóa hoạt động trên tất cả các nền tảng mà không phải lo lắng về các thủ thuật dành riêng cho nền tảng. –

+3

Không phải là một ý kiến ​​hay. Hãy xem xét: 'string input =" abc] [rf-d] [5 "'. "-" trong "rf-d" sẽ bị bắt làm dấu phân cách. Thay vào đó hãy xem câu trả lời được chấp nhận ở trên. –

+0

Trong trường hợp đó, hãy thay thế bằng và chia thành một ký tự không giống như ~ hoặc 'hoặc thậm chí một ký tự không phải bàn phím như ¿hoặc ◙ v.v. – seabass2020

Các vấn đề liên quan