web-dev-qa-db-ja.com

カンマ、スペース、またはセミコロンで区切られた文字列に対するRegex.Split()

私は、コンマ、スペース、またはセミコロンで区切った文字列を分割しようとしています。各区切り文字の後にスペースを含めることもできます。例えば

_22222,11111,23232 
OR
22222, 11111, 23232 
OR
22222;     11111; 23232
OR
22222 11111 23232 
_

これらのどれでも、3つの値を持つ配列を生成します_["22222","11111","23232"]_

これまでのところvar values = Regex.Split("22222, 11111, 23232", @"[\\s,;]+")がありますが、これは次のようにスペースを含む2番目と3番目の値を持つ配列を生成します。

_["22222"," 11111"," 23232"]
_
18
bflemi3

次の2つの可能性があります。

この場合、特定の区切り文字で文字列を分割します。 String.Splitは、この特別な目的のために作成されました。この方法はRegex.Splitより高速です。

char[] delimiters = new [] { ',', ';', ' ' };  // List of your delimiters
var splittedArray = myString.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
33
Cédric Bignon

文字列に@記号を使用しているため、"\"はリテラルスラッシュとして解釈されています。したがって、文字クラスは実際には"\""s"","、または";"として読み取っています。余分なスラッシュを削除すると、必要に応じて機能します。

var values = Regex.Split("22222, 11111, 23232", @"[\s,;]+")
8
JDB
Regex.Split("22222, 11111, 23232", @"[ ,;]+")

これは私のために働いた

また、以下の回答も確認してください。本当に必要なのは、いくつかの文字区切り文字に基づいて文字列を分割することだけです-string.splitがおそらくより良い解決策です

2
DarkWalker

「カンマ、スペース、またはセミコロンで区切られた文字列を分割しようとしています。各区切り文字の後にスペースを含めることもできます」と解釈するには、次のように試してください。

@"[,;]\s*|\s+"

これには、連続する区切り文字(空白を除く)がnotが単一の区切り文字として扱われるという性質があります。

ただし、連続するすべての区切り文字を1つとして処理する場合は、次のようにすることもできます。

@"[,;\s]+"

もちろん、その場合、string.Splitは、他の人が示しているように、より単純なオプションです。

1
Ani

この正規表現パターンを試してください:

([^,;\"\}\{\s*.]\d+)

サンプルテキストの場合:

{"123","456","789"}
1011,1213,1415
16, 17, 181920
212223;        242526;27
28 29 3031 

デモを参照

enter image description here

0
GRUNGER