C#の正規表現で郵便番号を抽出する

C#の正規表現で数字を判定

C#の正規表現で数字を判定する時、「¥d」というパターンが使えますが、これをそのまま使うと意図しない文字列がマッチすることがあります。

たとえば、以下のようなコードで文字列の中から郵便番号を抽出しようとするとおそらくおかしな動作になるでしょう。

var valZen = "〒100-0001 東京都千代田区千代田";
var matches = Regex.Matches(valZen, @"\d\d\d-\d\d\d\d");
foreach (Match match in matches)
{
    // 結果:100-0001
    Console.WriteLine(match.Value);
}

「¥d」というパターンは確かに数字にマッチするパターンではあるのですが、これは全角と半角を区別しません

Regex.IsMatchメソッド

正規表現で半角数字のみを判定する

Regex.Matchesの第三引数にRegexOptions.ECMAScriptを指定すれば全角は無視されます。

var matches = Regex.Matches(valZen, @"\d\d\d-\d\d\d\d", RegexOptions.ECMAScript);

正規表現で郵便番号を抽出するパターン

「¥d」をまとめて指定する書き方もあります。

// ハイフンがついた郵便番号を抽出する
string patternWithHyphen = @"\d{3}-\d{4}";

// ハイフンの有無にかかわらず郵便番号っぽいものを抽出する
string patternAllowNoHyphen = @"\d{3}-?\d{4}";

このブログの人気の投稿

Excel で入力した文字に勝手に取り消し線が入る

コピーした行の挿入が表示されない時はフィルタされていないかチェック