仅返回字符串中的数字0-9

时间:2009-05-10 00:57:12

标签: c# vb.net regex vbscript code-generation

我需要一个可以在VBScript和.NET中使用的正则表达式,它只返回字符串中的数字。

例如,以下任何“字符串”应仅返回 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上搜索。

[编辑] - 在设置musicfreak的答案后添加RegexBuddy生成的代码

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
}

7 个答案:

答案 0 :(得分:175)

在.NET中,您只能从字符串中提取数字。像这样:

string justNumbers = new String(text.Where(Char.IsDigit).ToArray());

答案 1 :(得分:11)

我不知道VBScript是否有某种“正则表达式替换”函数,但是如果它有,那么你可以做类似这样的伪代码:

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

我不知道VBScript所以我不能给你确切的代码,但这会删除任何不是数字的东西。

编辑:确保拥有全局标志(正则表达式末尾的“g”),否则它只匹配字符串中的第一个非数字。

答案 2 :(得分:8)

作为主要pygame.display.set_mode解决方案的替代方案,改编自similar question's答案:

.Net

答案 3 :(得分:6)

注意:你这里只解决了一半的问题。

对于“野外”输入的美国电话号码,您可能有:

  • 带或不带“1”前缀的电话号码
  • 包含或不包含区号的电话号码
  • 带有分机号码的电话号码(如果您盲目删除所有非数字,您将错过“x”或“分机”或线路上的任何内容)。
  • 可能是用助记符编码的数字(800-BUY-THIS或其他)

您需要为代码添加一些智能,以使得到的数字列表符合您在数据库中实际搜索的单个标准。

你可以做一些简单的事情来解决这个问题:

  • 在RegEx删除非数字之前,查看字符串中是否有“x”。如果有的话,在它之后切掉一切(将处理大多数版本的分机编号)。

  • 对于任何以10以及“1”开头的数字,请切断1.它不是区号的一部分,美国区号从2xx范围开始。

  • 对于任何仍然超过10位的数字,假设余数是某种类型的延伸,并将其删除。

  • 使用“结束”模式搜索进行数据库搜索(SELECT * FROM mytable WHERE phonenumber LIKE'blah%')。这将处理未提供区号的情况(尽管可能有错误),但您的数据库的数字 区号。

答案 4 :(得分:1)

从外观上看,你试图抓住任何10位数的电话号码......

为什么不首先在文本上替换字符串以删除以下任何字符。

<SPACE> , . ( ) - [ ] 

然后,您可以只进行正则表达式搜索10位数字。

\d{10}

答案 5 :(得分:0)

你是否经历过regexlib上的phone nr category。似乎有很多人做你需要的。

答案 6 :(得分:0)

最简单的解决方案,不使用正则表达式:

public string DigitsOnly(string s)
   {
     string res = "";
     for (int i = 0; i < s.Length; i++)
     {
       if (Char.IsDigit(s[i]))
        res += s[i];
     }
     return res;
   }