友情提示:380元/半年,儿童学编程,就上码丁实验室。
我们要做什么
使用Python正则表达式在一个文本文件中查找电话号码,找到之后写入到一个新的文件中。
先介绍下正则表达式的用法:
1.先导入re模块:
>>> import re
2.创建一个Regex对象(正则表达式对象)
>>> my_reg=re.compile(r’ddd-dddddddd’)
compile函数中传入的参数就是要匹配的模式(这里的d表示匹配一个数字)。
因为正则表达式中含有反斜杠,所以使用原始字符串(不然就需要转义反斜杠了)。
所以这个正则表达式匹配的字符串就是:三个数字加上一个横杠再加上8个数字。
另外一种简洁的写法是:>>> my_reg=re.compile(r’d{3}-d{8}’)
花括号及花括号里的数字,表示匹配前面模式多少次。
3.使用Regex对象的search方法,搜索字符串
>>> match=my_reg.search(‘xxx025-12345678ooo010-87654321ccc’)
如果匹配到字符串则search方法返回一个match对象,否则返回None
4.调用match对象的group方法,便可以得到匹配的字符串了
>>> match.group()
’025-12345678′
但是这种方法只能返回第一次匹配的结果
没有匹配到结果的情况:
>>> match=my_reg.search(‘xxx025-123xx678ooo010-876xx4x1ccc’)
>>> print(match)
None
>>> match is None
True
>>> bool(match)
False
5.使用findall方法返回所有结果,其返回一个字符串列表
(如果没有匹配结果则是一个空列表)
>>> resultList=my_reg.findall(‘xxx025-12345678ooo010-87654321ccc’)
>>> resultList
['025-12345678', '010-87654321']
没有匹配结果的情况:
>>> resultList=my_reg.findall(‘xxx025-1234xx78ooo010-87xx321ccc’)
>>> resultList
[]
下面来完成我们的例子:
找一个需要搜索的文件(本文为了演示,随便从网上复制了一个网页,手动向其中插入了一些电话号码),本例子中需要搜索的文件是text.txt,请确保你的Python文件也保存在该文件所在的目录。
Python脚本如下:
import re
result=open(‘result.txt’,’w’)
phone_reg=re.compile(r’d{3}-d{8}’)
with open(‘text.txt’) as f:
for line in f:
match=phone_reg.findall(line)
if match:
for rec in match:
result.write(rec)
result.write(‘n’)
result.close()
运行的结果便是在同一个目录下生成了一个result.txt文件,其中的内容便是匹配的所有电话号码:
入我的结果:
025-11111111
123-89876548
010-11123411
456-87646789
789-88888888
888-88888888
025-11561111
025-11116711
888-88888888
010-11678111
055-11345111
011-11543211
欢迎大家转发!