如何从长描述字段中提取联系人号码?

时间:2015-08-14 07:08:21

标签: c# regex string split

这是我的长输入字符串,其中包含此字符串之间的联系号码,如下所示:

  

sgsdgsdgs 123-456-7890 sdgsdgs(123)456-7890 sdgsdgsdg 123 456 7890   sdgsdgsdg 123.456.7890 sdfsdfsdfs +91(123)456-7890

现在我要提取所有输入数字,如:

123-456-7890
(123) 456-7890
123 456 7890
123.456.7890
+91 (123) 456-7890

我想将所有这些数字存储在数组中。

这是我尝试的但只获得2个数字:

string pattern = @"^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$";
 Regex reg = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);

 var a = txt.Split();
 List < string > list = new List < string > ();
 foreach(var item in a) {
     if (reg.IsMatch(item)) {
         list.Add(item);
     }
 }

任何人都可以帮我吗?

4 个答案:

答案 0 :(得分:3)

请勿使用Split

刚刚完成比赛并得到他们的Groups[0].Value,应该是这样的:

foreach (var m in MyRegex.Match(myInput).Matches)
    Console.WriteLine(m.Groups[0].Value);

regexhero上测试:

  1. 正则表达式:\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?:[ ]*x(\d+))?\s*
  2. 输入:sgsdgsdgs 123-456-7890 sdgsdgs (123) 456-7890 sdgsdgsdg 123 456 7890 sdgsdgsdg 123.456.7890 sdfsdfsdfs +91 (123) 456-7890
  3. 输出:5场比赛

    • 123-456-7890
    • (123)456-7890
    • 123 456 7890
    • 123.456.7890
    • +91(123)456-7890
  4. 编辑:regexhero不喜欢上一组中的空格,不得不用[ ]替换它。

答案 1 :(得分:2)

尝试直接在String上使用regex,例如:

using System.IO;
using System;
using System.Text.RegularExpressions;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Regex regex = new Regex(@"\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*");
        Match match = regex.Match("sgsdgsdgs 123-456-7890 sdgsdgs (123) 456-7890 sdgsdgsdg 123 456 7890 sdgsdgsdg 123.456.7890 sdfsdfsdfs +91 (123) 456-7890");
        List < string > list = new List < string > ();
        while (match.Success)
        {
            list.Add(match.Value);
            match = match.NextMatch();
        }
        list.ForEach(Console.WriteLine);
    }
}

答案 2 :(得分:1)

您得到两个数字,因为默认情况下split()使用空格作为分隔符。

答案 3 :(得分:1)

试试这个经过测试的代码。

static void Main(string[] args)        
        {
            string txt = "sgsdgsdgs 123-456-7890 sdgsdgs (123) 456-7890 sdgsdgsdg 123 456 7890 sdgsdgsdg 123.456.7890 sdfsdfsdfs +91 (123) 456-7890";
            Regex regex = new Regex(@"\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*");

            List<string> list = new List<string>();
            foreach (var item in regex.Matches(txt))
            {
                list.Add(item.ToString());
                Console.WriteLine(item);
            }

        Console.ReadLine();
    }