2009-08-10 16 views
109

区切り文字 "#"でC#の文字列を分割するときに問題があります。string.split - 複数の文字区切り文字で

たとえば、文字列 "abc] [rfd] [5] [、] [。"

配列を生成する必要があります。
ABC
RFD

しかし、私がRegExを試しても、私は区切り文字を分割することはできません。

EDIT:本質的に、正規表現を必要とせずにこの問題を解決したかったのです。私が受け入れる解決策は、

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

この分割質問を解決できるのはうれしいです。

+0

コードを掲載することはできますか? –

+0

あなたのコードに失敗したことを教えてください。 –

+0

また、あなたが投稿したものに加えて、あなたがそれから抜け出したいものを投稿してください。 –

答えて

202

両方string.SplitRegex用法表示するには:

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

または、私のようなあなたの最小限のコードの肛門: 'var parts1 = input.Split(new [] {"] ["}、StringSplitOptions.None);' –

+1

'stringSplitOptions.None'を' input.Split(new string [] {"} [)}'に渡すとどんな利点がありますか? – seebiscuit

+0

これは、両方の文字が正しいことを前提としていますか? 「[」または「]」のいずれかで分割したい場合はどうすればよいですか?これまでの私のテストから、私は違う話だと思いますよね? – C4u

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

このアプローチでは、[]と[[組み合わせて表示されていないときでも]]と[それぞれに分割する]ことを前提としています。 –

+2

string.Splitのオーバーロードは、それを2つの区切り文字として扱います。単に残りを破棄します。文字列を区切り文字(実際には文字列の配列)として受け入れるオーバーロードがあるので、空の値を削除する必要はありません。データ) –

+0

あなたの前提は[正しい。彼は指定しなかったので、私は彼に彼の例のために働く何かを与えました。もし彼がそれらをスキップしたくなければ、それは働くでしょう。しかし、より多くの情報がなければ、我々は決して知りません – SwDevMan81

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

あなたはおそらくどこかで '\ ['をしたいと思っています... –

11

別のオプション:単一文字の文字列の区切り文字を置き換え

を、その文字に分割します。

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

これは私がしていることです。これは、プラットフォーム固有のトリックを心配することなく、すべてのプラットフォームで動作する正規化された一般的な方法を私に提供します。 –

+3

良い考えではありません。 'string input =" abc "[rf-d] [5" ']を考えてみましょう。 "rf-d"の " - "はデリミタとして捕捉されます。代わりに上記の受け入れられた答えを見てください。 –

+0

その場合は、〜や 'や、¿やsuchなどのキーボード以外の文字でさえ、可能性の低い文字で置き換えて分割します。 – seabass2020

関連する問題