C# 从格式化字符串中提取电话号码正则表达式
鉴于电话号码均采用此格式:C# 从格式化字符串中提取电话号码正则表达式,c#,.net,regex,phone-number,C#,.net,Regex,Phone Number,鉴于电话号码均采用此格式: (999) 999-9999 Ext.9999" 我想将所有内容返回到第二个空格,例如: (999) 999-9999 有什么想法吗?不要使用正则表达式。使用然后将前两个元素重新连接在一起。如果字符串是s: string s = "(999) 999-9999 Ext.9999"; string number = s.Split(" Ext")[0]; 如果想要完美匹配,可以使用以下表达式: string s = "(999) 999-9999 Ex
(999) 999-9999 Ext.9999"
我想将所有内容返回到第二个空格,例如:
(999) 999-9999
有什么想法吗?不要使用正则表达式。使用然后将前两个元素重新连接在一起。如果字符串是s:
string s = "(999) 999-9999 Ext.9999";
string number = s.Split(" Ext")[0];
如果想要完美匹配,可以使用以下表达式:
string s = "(999) 999-9999 Ext.9999";
Match m = Regex.Match(s, @"(?<nr>\([0-9]{3}\)\s+[0-9]{3}\-[0-9]{4})");
if (m.Groups["nr"].Success)
{
Console.WriteLine(m.Groups["nr"].Value);
}
string s=“(999)999-9999 Ext.9999”;
Match m=Regex.Match(s,@“(?\([0-9]{3}\)\s+[0-9]{3}-[0-9]{4}”);
如果(m.Groups[“nr”]成功)
{
控制台写入线(m.Groups[“nr”]值);
}
其中s
包含完整的钉扎。如果真的是“此格式上的所有内容”,那么您可以只使用前14个字符:
string number = s.SubString(0, 14);
或者更灵活、更安全:
var idx = s.IndexOf(" Ext");
//good idea to check if idx == -1
string number = s.SubString(0, idx);
看看这个:
string s = "(999) 999-9999 Ext.9999";
string phonenumber1 = Regex.Replace(s, @"(?i)\s*ext\.\d+", "");
为什么要删除你不想要的东西?指定您想要的不是更好吗?@wouther,您认为较短的模式效率低吗?而且不必要的部分比要求的部分少。我对效率没有问题。。。想想看:如果你有一个提取所需部分的模式,你可以在任何长度的文本上重复使用它。因此,对于将来需要在不知道确切输入的情况下编写代码的开发人员来说,它更能证明未来,更干净。他为什么又把那个“分机”拆了?哦,他想要电话号码,不是很清楚吗?这同样适用于这里提出的
.Split
方法。如果是的话,那就太严厉了。我是第一个答案,并提供了与公认答案相同的答案。Sans代码示例。对C#不太熟悉。有效的scenerio'(999)999-9999 ext.9999'即ext
是小写字母,这有效吗?