0

[123,234,321,....] のような文字列があります。

正規表現を使用して数字のみを抽出できますか?

これは私が今使っているコードです

 public static string[] Split()
    {
        string s = "[123,234,345,456,567,678,789,890,100]";
        var temp = s.Replace("[", "").Replace("]", "");
        char[] separator = { ',' };
        return temp.Split(separator);

    }
4

6 に答える 6

2

これを使用できますstring.Split-正規表現は必要ありませんが、コードは簡略化できます。

var nums = s.Split('[', ']', ',');

返された配列で空のエントリを除外したい場合があると考えました:

var nums = s.Split(new[] { '[', ']', ',' }, 
                   StringSplitOptions.RemoveEmptyEntries);
于 2013-03-13T15:24:49.740 に答える
1

文字を取る Trim() へのオーバーロードがあります。

あなたはこれを行うことができます。

string s = "[123,234,345,456,567,678,789,890,100]";
var nums = s.Trim('[').Trim(']').Split(',');
于 2013-03-13T15:24:58.807 に答える
1

正規表現を使用する場合は、次を試してください。

string s = "[123,234,345,456,567,678,789,890,100]";            
var matches = Regex.Matches(s, @"[0-9]+", RegexOptions.Compiled);   

ただし、正規表現はコードを読みにくくする傾向があるため、元のアプローチに固執する可能性があります。

于 2013-03-13T15:28:01.887 に答える
0
string s = "[123,234,345,456,567,678,789,890,100]";
MatchCollection matches = Regex.Matches(s, @"(\d+)[,\]]");
string[] result = matches.OfType<Match>().Select(m => m.Groups[1].Value).ToArray();

ここで、@はそのままの文字列リテラルを表すために使用され、エスケープ文字 '\' を正規表現表記で直接使用することを許可します。

\d\d+数字です。1 つ以上の数字を意味します。括弧はグループを意味するので(\d+)、数字のグループが必要です。(*少し後で使用されるグループを参照)

[,\]]角括弧は、簡単に言えば、要素のいずれかを選択することを意味するため、エスケープする必要があったコンマ,または角括弧のいずれかが選択されます。]

したがって、正規表現は、連続した数字の後に,orが続く式を見つけます]。Matches は一致のセットを返します (複数のセットがあるため、これを使用します)。次に、LINQ を使用して各一致を調べ、2 番目のグループであるインデックス 1 グループを取得します。1 つのグループのみを指定しました。最初のグループ (インデックス 0) は、正規表現の一致全体であり、この場合、必要のない,orが含まれます。]

于 2013-03-13T15:28:37.273 に答える
0

他の回答が示すように string.Split を使用することができ、おそらく使用する必要がありますが、この質問では、正規表現でそれを実行できるかどうかを具体的に尋ねています。はい、できます:-

var r = new Regex(@"\d+", RegexOptions.Compiled );
var matches = r.Matches("[123,234,345,456,567,678,789,890,100]");
于 2013-03-13T21:29:41.787 に答える
0

string.Splitメソッドを使用してみてください。

string s = "[123,234,345,456,567,678,789,890,100]";
var numbers = s.Split('[',']', ',');
foreach(var i in numbers )
   Console.WriteLine(i);

ここに がありDEMOます。

編集:Odedが述べたように、あなたも使いたいかもしれませんStringSplitOptions.RemoveEmptyEntries

于 2013-03-13T15:26:51.347 に答える