C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で文字列から数値を検索・抽出する方法【Char.IsDigit()と正規表現の2つの手法】

C#で文字列の中に含まれる数値だけを取り出したい場面は、実務でもよくあります。例えば、ユーザー入力から数字部分のみを抜き出したり、ログファイルから数値データを抽出したりするケースです。

本記事では、C#で文字列から数値を見つけて抽出する2つの代表的な方法を、サンプルコード付きでわかりやすく解説します。

正規表現(Regex)とは

正規表現とは、入力テキストに対してパターンマッチングを行うための仕組みです。.NETフレームワークには正規表現エンジンが組み込まれており、パターンに一致する文字列を簡単に検索・抽出できます。

パターンは、1つ以上の文字リテラル、演算子、または構成要素で構成されます。RegExで使われる基本的なメタ文字は以下の通りです。

* = 0回以上の繰り返し
? = 0回または1回の出現
^ = 否定(〜ではない)
[] = 文字の範囲指定

「^」記号は否定条件を指定するために使用します。「[]」ブラケットには、0~9、a-z、A-Z のように範囲の値を指定できます。

方法1:Char.IsDigit() を使う方法

まずは、Char.IsDigit() メソッドを使って、文字列の各文字が数字かどうかを判定しながら抽出する方法です。

サンプルコード

using System;
namespace DemoApplication{
    public class Program{
        static void Main(string[] args){
            string str1 = "123string456";
            string str2 = string.Empty;
            int val = 0;
            Console.WriteLine($"String with number: {str1}");
            for (int i = 0; i < str1.Length; i++){
                if (Char.IsDigit(str1[i]))
                    str2 += str1[i];
            }
            if (str2.Length > 0)
                val = int.Parse(str2);
                Console.WriteLine($"Extracted Number: {val}");
            Console.ReadLine();
        }
    }
}

実行結果

String with number: 123string456
Extracted Number: 123456

この例では、文字列 str1 のすべての文字をループで走査しています。Char.IsDigit() は、対象の文字が数字かどうかを判定するメソッドで、数字であれば新しい文字列 str2 に追加していきます。最後に int.Parse() でその文字列を整数値に変換しています。

この方法はシンプルで直感的ですが、文字ごとに判定するため、コードがやや長くなる点がデメリットです。

方法2:Regex(正規表現)を使う方法

次に、正規表現を使って数値を抽出する方法です。こちらの方がコードが簡潔になり、実務でも広く使われています。

サンプルコード

using System;
using System.Text.RegularExpressions;
namespace DemoApplication{
    public class Program{
        static void Main(string[] args){
            string str1 = "123string456";
            string str2 = string.Empty;
            int val = 0;
            Console.WriteLine($"String with number: {str1}");
            var matches = Regex.Matches(str1, @"\d+");
            foreach(var match in matches){
                str2 += match;
            }
            val = int.Parse(str2);
            Console.WriteLine($"Extracted Number: {val}");
            Console.ReadLine();
        }
    }
}

実行結果

String with number: 123string456
Extracted Number: 123456

この例では、正規表現パターン「\d+」を使用して、文字列 str1 から数値部分のみを抽出しています。「\d」は任意の1桁の数字、「+」は1回以上の連続した出現を意味します。つまり「\d+」は「1桁以上の連続する数字」にマッチします。

Regex.Matches() はマッチしたすべての箇所をコレクションとして返すため、foreachループで各マッチ結果を結合し、最後に int.Parse() で整数に変換しています。

まとめ

C#で文字列から数値を抽出する方法として、以下の2つを紹介しました。

  • Char.IsDigit(): 1文字ずつ判定するシンプルな方法。小規模な処理に向いています。
  • Regex(正規表現): 「\d+」パターンで一括抽出できる簡潔な方法。複雑な条件にも柔軟に対応可能です。

用途に応じて使い分けることで、より効率的で可読性の高いコードを書くことができます。特に正規表現は応用範囲が広いため、ぜひ習得しておくことをおすすめします。

  1. JavaScriptで数値と文字列を加算するとどうなる?連結が起こる仕組みをわかりやすく解説

    数値と文字列の加算で起こることJavaScriptでは、数値と数値を「+」演算子で足すと、通常どおり加算(計算)が行われます。しかし、数値と文字列を足そうとした場合には加算が成立せず、代わりに連結(concatenation)が実行されます。これは、「+」演算子のオペランドにひとつでも文字列が含まれていると、JavaScriptがその処理を文字列の連結として扱うためです。サンプルコード以下の例では、4つの変数 a・b・c・d を用意し、それぞれの計算結果と、typeof 演算子で調べたデータ型を出力して挙動を比較します。<!DOCTYPE html><html><

  2. Swiftで文字列の最後の4文字を抽出する方法|substringとsuffixの使い方を解説

    Swiftで文字列の末尾から4文字を抽出したい場合、Stringクラスが標準で提供している機能を活用できます。Swiftはバージョンアップのたびにメソッドの追加・非推奨化・改善が繰り返されてきたため、同じ目的を実現するための手段も複数存在します。本記事では、バージョンごとの代表的な抽出方法をサンプルコード付きでわかりやすく解説します。方法1:substringを使う(Swift 3)Swift 3では、substring(from:)メソッドを使って文字列の一部を切り出すことができました。文字列の終了インデックスからオフセットを指定することで、末尾の文字を取得できます。var Str1 = &