急求-C#正则表达式!

billyhe07 2010-12-21 01:58:14
本人对正则不太了解,搜索了很多都不能正常,特此来想各位高手求助了。
我想要一个正则截取一个字符串中的电话号码 和 去除一个字符串中所有的空格。电话号码为固定电话的形式那样的,如 86-028-25636547 ,好像区号3位电话号码是8位,区号4位的话电话为7-8位。
要考虑前面有86的情况,请高手亲自测试后发出来吧,本人目前还不太懂正则,要直接能用的。

另外 :
Match TelMatch = Regex.Match(tel, @"(\d{3}-|\d{4}-)?(\d{8}|\d{7})?", RegexOptions.IgnoreCase | RegexOptions.Multiline);
string _tel = TelMatch.Groups[1].Value;

上面的这样代码是根据正则截取符合的字符串吧。
再次谢谢了,请高手帮忙了。
...全文
163 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
bestdowt1314 2010-12-21
  • 打赏
  • 举报
回复
(86-)?(\d{3}-\d{8}|\d{4}-\d{7})
不懂装懂 2010-12-21
  • 打赏
  • 举报
回复
逍遥来了,我就不说话了
billyhe07 2010-12-21
  • 打赏
  • 举报
回复
嗯,谢谢,我有些还看不太懂,但是我也认真的看了,还要多多学习正则。。再次谢谢。
兔子-顾问 2010-12-21
  • 打赏
  • 举报
回复
....
csdn的格式对不齐
兔子-顾问 2010-12-21
  • 打赏
  • 举报
回复
调整一下,对齐

Regex reg = new Regex(@"(?xn) #正则模式x表示忽略空白字符和注释,n表示忽略隐式分组
\+? #有+86的情况的
\d{1,3} #好像国家编码是3位最短是美国和加拿大,可能1位
- #连接字符
\d{3}(?<f>\d)? #区号,第四位不确定
- #连接字符
(?(f)\d{7,8}|\d{8}) #如果捕获到f则是4位的,4位的固定捕获8个数字,反之7或8个数字都可以");
Console.WriteLine(reg.IsMatch("86-028-25636547"));//True
Console.WriteLine(reg.IsMatch("86-028-2563654"));//False
Console.WriteLine(reg.IsMatch("86-0991-2563654"));//True
兔子-顾问 2010-12-21
  • 打赏
  • 举报
回复
er...
不是乱贴的,可以编译直接用的。

Regex reg = new Regex(@"(?xn) #正则模式x表示忽略空白字符和注释,n表示忽略隐式分组
\+? #有+86的情况的
\d{1,3} #好像国家编码是3位最短是美国和加拿大,可能1位
- #连接字符
\d{3}(?<f>\d)? #区号,第四位不确定
- #连接字符
(?(f)\d{7,8}|\d{8}) #如果捕获到f则是4位的,4位的固定捕获8个数字,反之7或8个数字都可以");
Console.WriteLine(reg.IsMatch("86-028-25636547"));//True
Console.WriteLine(reg.IsMatch("86-028-2563654"));//False
Console.WriteLine(reg.IsMatch("86-0991-2563654"));//True
billyhe07 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wuyazhe 的回复:]
C# code
(?xn) #正则模式x表示忽略空白字符和注释,n表示忽略隐式分组
\+? #有+86的情况的
\d{1,3} #好像国家编码是3位最短是美国和加拿大,可能1位
- #连接字符
\d{3}(?<f>\d)? #区号,第四位不确定
- ……
[/Quote]

这很专业啊,谢谢啊。顾问就是不一样。
兔子-顾问 2010-12-21
  • 打赏
  • 举报
回复
(?xn)               #正则模式x表示忽略空白字符和注释,n表示忽略隐式分组
\+? #有+86的情况的
\d{1,3} #好像国家编码是3位最短是美国和加拿大,可能1位
- #连接字符
\d{3}(?<f>\d)? #区号,第四位不确定
- #连接字符
(?(f)\d{7,8}|\d{8}) #如果捕获到f则是4位的,4位的固定捕获8个数字,反之7或8个数字都可以
jcx396158820 2010-12-21
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20070712/15/e5ecc12b-08f1-4e80-9cec-84ea370abafa.html

http://hi.baidu.com/hardcom/blog/item/ea87e7452cfd6a8eb3b7dc55.html

参考一下吧
billyhe07 2010-12-21
  • 打赏
  • 举报
回复
还有一个去除所有空格的帮我写一下啊
billyhe07 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fdh120 的回复:]
string _tel = TelMatch.Groups[0].Value;
[/Quote]

我看到别人说是从1开始的,被忽悠了~
不懂装懂 2010-12-21
  • 打赏
  • 举报
回复
string _tel = TelMatch.Groups[0].Value;
billyhe07 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fdh120 的回复:]
写错了
(86-)?(\d{3}-\d{8}|\d{4}-\d{7,8})

引用 1 楼 fdh120 的回复:
^(86-)?\d{3}-\d{8}|\d{4}-\d{7,8}$
[/Quote]
string tel = "86-755-25556565";
Match TelMatch = Regex.Match(tel, @"(86-)?\d{3}-\d{8}|\d{4}-\d{7,8}", RegexOptions.IgnoreCase | RegexOptions.Multiline);
string _tel = TelMatch.Groups[1].Value;
是这样用吗,运行出来_tel 为空。
problem2050 2010-12-21
  • 打赏
  • 举报
回复
^((86-)?\d{3}-\d{8})|(\d{4}-\d{7,8})$
billyhe07 2010-12-21
  • 打赏
  • 举报
回复
晕,用不了啊
不懂装懂 2010-12-21
  • 打赏
  • 举报
回复
写错了
(86-)?(\d{3}-\d{8}|\d{4}-\d{7,8})
[Quote=引用 1 楼 fdh120 的回复:]
^(86-)?\d{3}-\d{8}|\d{4}-\d{7,8}$
[/Quote]
不懂装懂 2010-12-21
  • 打赏
  • 举报
回复
^(86-)?\d{3}-\d{8}|\d{4}-\d{7,8}$

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧