質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

Q&A

解決済

3回答

4113閲覧

C# 文字列から複数の数値群を抜き出し、配列に格納する方法

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

0グッド

0クリップ

投稿2019/03/28 15:33

AAA0120BBB1234CCC

と一つの文字列(string)に複数の数値があるときに

c#

1int[] 2 3[0] 120 4[1] 1234 5. 6. 7.

のように、各数値群ごとに抜き出し、別々に配列に格納する方法がわかりません。

Regex.Replace()で数字以外の文字を""に置き換えてからint.Parse()
のような方法だと、全て結合されて上の例だと

1201234

となってしまいます。

良い対処法がありましたら教えてください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

正規表現で数値部分だけ抜き出せば簡単にリスト化できます。

何度も処理するなら正規表現はコンパイルした方がいいとか、intを超える数値が来たらどうするかとはありますが、基本的にはこれだけです。

C#

1var text = "AAA0120BBB1234CCC"; 2 3var array = Regex.Matches( text, "[0-9]+") 4 .Cast<Match>() 5 .Select( m => int.Parse( m.Value ) ) 6 .ToArray();

MatchCollection に Select 拡張メソッドがないので、Cast 経由して IEnumereable に変換する必要があるのがちょっともやりますが...

投稿2019/03/28 16:27

編集2019/03/28 16:32
draq

総合スコア2573

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/28 16:59

ありがとうございました。
guest

0

正規表現を使うなら、

string str = "AAA0120BBB1234CCC"; string s1 = System.Text.RegularExpressions.Regex.Replace(str, "[^0-9]+", ","); string s2 = System.Text.RegularExpressions.Regex.Replace(s1, "^,", ""); string s3 = System.Text.RegularExpressions.Regex.Replace(s2, ",$", ""); string[] arr = s3.Split(','); int[] n = new int[arr.Length]; for (int i = 0; i < n.Length; i++) { n[i] = int.Parse(arr[i]); }

とか。
(もう少しスマートにできそうな気もしますが・・・)

投稿2019/03/28 16:17

Nyaf

総合スコア108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/28 16:59

ありがとうございました。
guest

0

public IEnumerable<int> 数値抽出(string text) { HashSet<char> num_hash = "0123456789".ToHashSet(); List<char> list = new List<char>(); foreach (var item in text) { if(num_hash.Contains(item)) { list.Add(item); } else { if (list.Any()) { yield return int.Parse(string.Join("", list)); } list.Clear(); } } if(list.Any()) { yield return int.Parse(string.Join("", list)); } }

こんな感じ。よくやるIEnumerableyield returnを使うプログラミングという感じ。

投稿2019/03/28 15:53

編集2019/03/28 16:12
kiichi54321

総合スコア1984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/28 16:59

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問