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.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}";