Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3833|回复: 8

[已解决]怎样用正则表达式提取字符串的电话号码?

[复制链接]
发表于 2015-6-27 15:34 | 显示全部楼层 |阅读模式
本帖最后由 tinytiger 于 2015-6-28 09:50 编辑

怎样用正则表达式提取字符串的7位、8位或11位电话号码(连续出现7次、8次或11次的数字)?
最好能写成自定义函数
最佳答案
2015-6-28 09:39
(^|\D)(\d{7}|\d{8}|\d{11})(\D|$)

这样就可以提取字符串中的连续7个或8个或11个数字。

写成自定义函数代码如下:
  1. Function TQ$(txt$)
  2.     With CreateObject("VBScript.RegExp")
  3.         .Global = True
  4.         .Pattern = "(^|\D)(\d{7}|\d{8}|\d{11})(\D|$)"
  5.         If .test(txt) Then
  6.             For Each m In .Execute(txt)
  7.                 s = s & "/" & m.SubMatches(1)
  8.             Next
  9.             TQ = Mid(s, 2)
  10.         End If
  11.     End With
  12. End Function
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-6-28 09:27 | 显示全部楼层
回复

使用道具 举报

发表于 2015-6-28 09:39 | 显示全部楼层    本楼为最佳答案   
(^|\D)(\d{7}|\d{8}|\d{11})(\D|$)

这样就可以提取字符串中的连续7个或8个或11个数字。

写成自定义函数代码如下:
  1. Function TQ$(txt$)
  2.     With CreateObject("VBScript.RegExp")
  3.         .Global = True
  4.         .Pattern = "(^|\D)(\d{7}|\d{8}|\d{11})(\D|$)"
  5.         If .test(txt) Then
  6.             For Each m In .Execute(txt)
  7.                 s = s & "/" & m.SubMatches(1)
  8.             Next
  9.             TQ = Mid(s, 2)
  10.         End If
  11.     End With
  12. End Function
复制代码
回复

使用道具 举报

发表于 2015-6-28 09:46 | 显示全部楼层
解释一下表达式:
(^|\D)(\d{7}|\d{8}|\d{11})(\D|$)

第1组 (^|\D):  起始位^ 或| 任意非数字\D

第2组(\d{7}|\d{8}|\d{11}): 长度分别为 {7} 或| {8} 或| {11} 的数字\d

第3组 (\D|$):  任意非数字\D 或| 结束位$

回复

使用道具 举报

 楼主| 发表于 2015-6-28 09:49 | 显示全部楼层
香川群子 发表于 2015-6-28 09:39
(^|\D)(\d{7}|\d{8}|\d{11})(\D|$)

这样就可以提取字符串中的连续7个或8个或11个数字。

完全符合要求,非常感谢!
回复

使用道具 举报

 楼主| 发表于 2015-6-28 10:10 | 显示全部楼层
香川群子 发表于 2015-6-28 09:46
解释一下表达式:
(^|\D)(\d{7}|\d{8}|\d{11})(\D|$)

如果想把手机号(1**********)和带区号的固定电话(如0234*******或0123-*******)区分开来,该怎么表达啊?谢谢!
回复

使用道具 举报

 楼主| 发表于 2015-6-28 10:25 | 显示全部楼层
本帖最后由 tinytiger 于 2015-6-28 10:51 编辑

是不是该这么写:
.Pattern = "(^|\D)(\d{7}|\d{8}|1\d{10}|0\d{10,11}|0\d{2,3}-\d{7,8})(\D|$)"
回复

使用道具 举报

 楼主| 发表于 2015-6-28 10:30 | 显示全部楼层
本帖最后由 tinytiger 于 2015-6-28 11:01 编辑

晕了,中间带“-”时不对了,找到原因了,原来少了一个\
回复

使用道具 举报

 楼主| 发表于 2015-6-28 10:55 | 显示全部楼层
修正了一下,是不是该这么写:.Pattern = "(^|\D)(\d{7}|\d{8}|1\d{10}|0\d{2,3}[^0]\d{6,7}|0\d{2,3}-\d{7,8})(\D|$)"
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 08:33 , Processed in 0.318205 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表