c# - 如何从长描述字段中提取联系电话?

标签 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);
     }
 }

谁能帮我解决这个问题??

最佳答案

不要为此使用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/7890
  3. 输出:5 个匹配项

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

编辑:regexhero 不喜欢最后一组中的空格,不得不将其替换为 [ ]

关于c# - 如何从长描述字段中提取联系电话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32004229/

相关文章:

c# - 在 MVC 应用程序中拒绝旧浏览器

c# - 我能否以编程方式覆盖客户端 app.config WCF 端点地址?

javascript - 正则表达式语法错误

regex - 读取两个字符串之间的子字符串 CF

c# - 如何使用 .NET 获取位于两个 '{' 括号'}' 之间的文本字符串?

java - 通过 DatagramChannel 发送消息

Java Double setScale 和 RoundingMode 在 C# 中等效吗?

c# - EF Core 2 - 只有 1 个导航属性/关系知识的关系?

regex - ElasticSearch按正则表达式排序

c++ - 视觉 C++ : Convert data type PCSTR to LPCWSTR