string.split-複数の文字区切り文字による


151

"] ["の区切り文字でc#の文字列を分割するのに問題があります。

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

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

しかし、RegExを試しても、区切り文字が分割されないので、動作しないようです。

編集:本質的に私は正規表現を必要とせずにこの問題を解決したいと思いました。私が受け入れる解決策は次のとおりです。

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

この分割された質問を解決できてうれしいです。

c#  split 

失敗したコードを見せてください。
Konrad Rudolph、

また、あなたが投稿したものに加えて、あなたがそれから得たいものを投稿してください。
ラッセV.カールセン

回答:


268

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

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

5
または、私のような最小限のコードが次のようになっている場合: 'var parts1 = input.Split(new [] {"] ["}、StringSplitOptions.None);'
ポールグリムショー2014

2
提供の利益の何StringSplitOptions.Noneオーバーはinput.Split(new string[] { "][" })
Seebiscuit 2016年

1
これは、両方のキャラクターがいることを前提としていますか?「[」または「]」で分割したい場合はどうなりますか?これまでの私のテストから、それは別の話だと思いますよね?
C4d 2016年

よろしくお願いいたします。
Kumar 2016年

3
@ C4u String.Split("[]".ToCharArray())これは[と]の両方で別々に分割されます。例:Hello [World] Its [Me!こんにちは、世界、その、私!
Ma Dude

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

8
このアプローチでは、] [と[の組み合わせに現れない場合でも、]と[ごとに分割することを想定していることに注意してください。
ラッセV.カールセン

2
string.Splitのそのオーバーロードは、2つの別個の区切り文字としてそれを処理しています-単にあなたは残りを破棄しています。文字列を区切り文字(実際には文字列の配列)として受け入れるオーバーロードがあります。そのため、空の値を削除する必要はありません(つまり、空の値がデータに有効に存在する場合は、空の値を見つけることができます
Marcグラベル

あなたの]仮定は[正しいです。彼は特定しなかったので、私は彼の例でうまくいくような何かを彼に与えました。彼がそれらをスキップしたくない場合は、動作します。しかし、これ以上の情報がなければ、私たちは決して知ることはできません
SwDevMan81 2009

それがが探していたものです。質問では簡単な問題でしたが、これは高度な回答です。
Bitterblue

それがまさに私が探していたものです。しかし、正しい答えは私にとってもニュースです。マークが説明したように、複数のキャラクターで分割できることを知りませんでした。構文はかなりごみです。
Piotr Kula

13

別のオプション:

文字列区切り文字を1文字に置き換え、その文字で分割します。

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

1
これが私がすることです。これにより、プラットフォーム固有のトリックを気にすることなく、すべてのプラットフォームで機能する正規化された一般的な方法が得られます。
David Betz

5
良い考えではありません。検討してください string input = "abc][rf-d][5"。「rf-d」の「-」は区切り文字としてキャッチされます。代わりに、上記の受け入れられた回答を参照してください。
Gilad Barner、2016年

その場合には、と交換し、そのようにも〜や`や、¿または◙などのような非キーボード文字などの可能性は低いキャラクターでスプリット
seabass2020

1
明確で堅牢で、正規化できる場合の解決策が気に入っています。私の使用法Dim Levels As New List(Of String)(newSelectedTask.Replace(LevelDelimter, Chr(13)).Split(Chr(13)))
Nasenbaer

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.