1. ホーム
  2. c#

文字列から0-9の数字のみを返す

2023-09-21 16:24:36

質問

VBScriptと.NETで使用できる、文字列の中にある数字だけを返す正規表現が必要です。

例えば、次の"strings"のいずれかが、以下のものだけを返す必要があります。 1231231234

  • 123 123 1234
  • (123) 123-1234
  • 123-123-1234
  • (123)123-1234
  • 123.123.1234
  • 123 123 1234
  • 1 2 3 1 2 3 1 2 3 4

これは、顧客が電子メールで提供する可能性のある電話番号を見つけ、データベース検索を行うために、電子メールパーサーで使用されるでしょう。

似たような正規表現を見逃したかもしれませんが、regexlib.comで検索しました。

[EDIT] - RegexBuddy を設定した後、musicfreak さんの回答を追加しました。

VBScript コード

Dim myRegExp, ResultString
Set myRegExp = New RegExp
myRegExp.Global = True
myRegExp.Pattern = "[^\d]"
ResultString = myRegExp.Replace(SubjectString, "")

VB.NET

Dim ResultString As String
Try
      Dim RegexObj As New Regex("[^\d]")
      ResultString = RegexObj.Replace(SubjectString, "")
Catch ex As ArgumentException
      'Syntax error in the regular expression
End Try

C#

string resultString = null;
try {
    Regex regexObj = new Regex(@"[^\d]");
    resultString = regexObj.Replace(subjectString, "");
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}

どのように解決するのですか?

VBScript に何らかの "正規表現の置換" 機能があるかどうかは知りませんが、もしあれば、この疑似コードのようにすることができます。

reg_replace(/\D+/g, '', your_string)

VBScriptを知らないので正確なコードは言えませんが、これで数字でないものは削除されます。

編集:グローバルフラグ(正規表現の最後の "g" )があることを確認してください。そうしないと、文字列内の最初の数字でないものにのみマッチします。