C# 如何从长描述字段中提取联系人号码?
这是我的长输入字符串,该字符串之间包含联系人号码,如下所示: sgsdgsdgs 123-456-7890 sdgsdgs(123)456-7890 sdgsdgsdg 123 456 7890 sdgsdgsdg 123.456.7890 sdfsdfsdfs+91(123)456-7890 现在我想提取所有输入数字,如: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 我想将所有这些数字存储在
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