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+」パターンで一括抽出できる簡潔な方法。複雑な条件にも柔軟に対応可能です。
用途に応じて使い分けることで、より効率的で可読性の高いコードを書くことができます。特に正規表現は応用範囲が広いため、ぜひ習得しておくことをおすすめします。
-
JavaScriptで数値と文字列を加算するとどうなる?連結が起こる仕組みをわかりやすく解説
数値と文字列の加算で起こることJavaScriptでは、数値と数値を「+」演算子で足すと、通常どおり加算(計算)が行われます。しかし、数値と文字列を足そうとした場合には加算が成立せず、代わりに連結(concatenation)が実行されます。これは、「+」演算子のオペランドにひとつでも文字列が含まれていると、JavaScriptがその処理を文字列の連結として扱うためです。サンプルコード以下の例では、4つの変数 a・b・c・d を用意し、それぞれの計算結果と、typeof 演算子で調べたデータ型を出力して挙動を比較します。<!DOCTYPE html><html><
-
Swiftで文字列の最後の4文字を抽出する方法|substringとsuffixの使い方を解説
Swiftで文字列の末尾から4文字を抽出したい場合、Stringクラスが標準で提供している機能を活用できます。Swiftはバージョンアップのたびにメソッドの追加・非推奨化・改善が繰り返されてきたため、同じ目的を実現するための手段も複数存在します。本記事では、バージョンごとの代表的な抽出方法をサンプルコード付きでわかりやすく解説します。方法1:substringを使う(Swift 3)Swift 3では、substring(from:)メソッドを使って文字列の一部を切り出すことができました。文字列の終了インデックスからオフセットを指定することで、末尾の文字を取得できます。var Str1 = &