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

C# 如何从长描述字段中提取联系人号码?,c#,regex,string,split,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 我想将所有这些数字存储在

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

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);
     }
 }
string pattern=@“^\s*(?:\+?(\d{1,3}))?[-.(]*(\d{3})[-.]*(\d{3})[-.]*(\d{4})(?:*x(\d+))\s*$”;
Regex reg=new Regex(模式,RegexOptions.Compiled | RegexOptions.IgnoreCase);
var a=txt.Split();
列表<字符串>列表=新列表<字符串>();
foreach(a中的var项目){
如果(注册IsMatch(项目)){
列表。添加(项目);
}
}

有人能帮我吗???

尝试直接在字符串上使用正则表达式,例如:

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);
    }
}
使用System.IO;
使用制度;
使用System.Text.RegularExpressions;
使用System.Collections.Generic;
班级计划
{
静态void Main()
{
正则表达式正则表达式=新正则表达式(@“\s*(?:\+(\d{1,3}))?[-.(]*(\d{3})[-.)]*(\d{3})[-.]*(\d{4})(?:*x(\d+))\s*”;
匹配匹配=正则表达式匹配(“sgsdgsdgs 123-456-7890 sdgsdgs(123)456-7890 sdgsdgsdg 123 456 7890 sdgsdgsdg 123.456.7890 SDFSDFSF+91(123)456-7890”);
列表<字符串>列表=新列表<字符串>();
while(匹配成功)
{
list.Add(match.Value);
match=match.NextMatch();
}
list.ForEach(Console.WriteLine);
}
}

尝试直接在字符串上使用正则表达式,如:

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);
    }
}
使用System.IO;
使用制度;
使用System.Text.RegularExpressions;
使用System.Collections.Generic;
班级计划
{
静态void Main()
{
正则表达式正则表达式=新正则表达式(@“\s*(?:\+(\d{1,3}))?[-.(]*(\d{3})[-.)]*(\d{3})[-.]*(\d{4})(?:*x(\d+))\s*”;
匹配匹配=正则表达式匹配(“sgsdgsdgs 123-456-7890 sdgsdgs(123)456-7890 sdgsdgsdg 123 456 7890 sdgsdgsdg 123.456.7890 SDFSDFSF+91(123)456-7890”);
列表<字符串>列表=新列表<字符串>();
while(匹配成功)
{
list.Add(match.Value);
match=match.NextMatch();
}
list.ForEach(Console.WriteLine);
}
}

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

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

不要为此使用
split

只需查看匹配项并获取其
组[0]。值应如下所示:

foreach (var m in MyRegex.Match(myInput).Matches)
    Console.WriteLine(m.Groups[0].Value);
测试日期:

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

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

  • 编辑:regexhero不喜欢上一组中的空格,必须将其替换为
    []

    不要为此使用
    拆分

    只需查看匹配项并获取其
    组[0]。值应如下所示:

    foreach (var m in MyRegex.Match(myInput).Matches)
        Console.WriteLine(m.Groups[0].Value);
    
    测试日期:

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

    • 123-456-7890
    • (123)456-7890
    • 1234567890
    • 123.456.7890
    • +91(123)456-7890
  • 编辑:regexhero不喜欢最后一组中的空格,必须用
    []

    替换它,尝试此测试代码

    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();
        }
    
    static void Main(字符串[]args)
    {
    string txt=“sgsdgsdgs 123-456-7890 sdgsdgs(123)456-7890 sdgsdgsdg 123 456 7890 sdgsdgsdg 123.456.7890 SDFSDFSF+91(123)456-7890”;
    正则表达式正则表达式=新正则表达式(@“\s*(?:\+(\d{1,3}))?[-.(]*(\d{3})[-.)]*(\d{3})[-.]*(\d{4})(?:*x(\d+))\s*”;
    列表=新列表();
    foreach(regex.Matches(txt)中的变量项)
    {
    list.Add(item.ToString());
    控制台写入线(项目);
    }
    Console.ReadLine();
    }
    
    尝试此测试代码

    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();
        }
    
    static void Main(字符串[]args)
    {
    string txt=“sgsdgsdgs 123-456-7890 sdgsdgs(123)456-7890 sdgsdgsdg 123 456 7890 sdgsdgsdg 123.456.7890 SDFSDFSF+91(123)456-7890”;
    正则表达式正则表达式=新正则表达式(@“\s*(?:\+(\d{1,3}))?[-.(]*(\d{3})[-.)]*(\d{3})[-.]*(\d{4})(?:*x(\d+))\s*”;
    列表=新列表();
    foreach(regex.Matches(txt)中的变量项)
    {
    list.Add(item.ToString());
    控制台写入线(项目);
    }
    Console.ReadLine();
    }
    

    从正则表达式的开头移除
    ^
    ,从末尾移除
    $
    ,它应该work@m.cekiera:获取相同的输出。不工作确保不会:不要拆分输入字符串。将其传递给Regex.Matches作为一个整体。好的,txt.Split()中的分隔符是什么?是不是应该拆分(“\s”)或者类似的东西?@Stribizev:你能把你的ansremove从regex的开头和结尾分别粘贴到
    ^
    上吗work@m.cekiera:获取相同的输出。不工作确保不会:不要拆分输入字符串。将其传递给Regex.Matches作为一个整体。好的,txt.Split()中的分隔符是什么?是否应该拆分(“\s”)或类似的内容?@Stribizev:您可以发布您的ans\s不工作。请检查。给我错误。无法识别转义序列列表。添加和匹配。我相信下一个匹配应该被交换。@Stribizev您是对的,一如既往,谢谢您的评论@SanjivRajput代码中有一个bug,t