这是我的长输入字符串,其中包含此字符串之间的联系电话,如下所示:
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 上测试:
- 正则表达式:
\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
/7890 输出: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/