这是我的长输入字符串,其中包含此字符串之间的联系号码,如下所示:
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);
}
}
任何人都可以帮我吗?
答案 0 :(得分:3)
请勿使用Split
。
刚刚完成比赛并得到他们的Groups[0].Value
,应该是这样的:
foreach (var m in MyRegex.Match(myInput).Matches)
Console.WriteLine(m.Groups[0].Value);
在regexhero上测试:
\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 sdfsdfsdfs +91 (123) 456-7890
输出:5场比赛
编辑: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();
}