博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python正则表达式练习篇2
阅读量:6009 次
发布时间:2019-06-20

本文共 2030 字,大约阅读时间需要 6 分钟。

首先生成正则表达式练习的数据:

#! /usr/bin/python from random import randint, choicefrom string import lowercasefrom sys import maxintfrom time import ctimedoms = ('com', 'edu', 'net', 'org', 'gov')for i in range(randint(5, 10)):	#generate time in string format	dtint = randint(0, maxint - 1)	dtstr = ctime(dtint)	#generate user name, length:4~7	shorter = randint(4, 7)	em = ''	for j in range(shorter):		em += choice(lowercase)	#generate domain name, length:shorter~12	longer  = randint(shorter, 12)	dn = ''	for j in range(longer):		dn += choice(lowercase)	print '%s::%s@%s.%s::%d-%d-%d' % (dtstr, em, dn, choice(doms), dtint, shorter, longer)

每次gendata.py执行都会产生5~10行的输出,在每行的输出中,我们从int类型的范围内,随机的挑选一个整数,并把这个整数换算成计算机的时间,换算的方法就是从1970年1月1日零点到现在的秒数。

random.choice()这个函数的用处就是根据指定的序列,随机返回该序列中的一个元素,在这里我们指定序列是26个小写字母,string.lowercase。

登陆名的长度为4~7个字符,虚拟邮箱的地址的域名长度在4~12个字符,但是不能短于登录名的长度。


 

看生成的数据:

Wed May 27 07:48:25 1981::ufbfecs@surdpbsoru.net::359768905-7-10Thu Apr  7 09:42:29 2033::ewanfh@znkvahbcorb.edu::1996450949-6-11Fri Feb  9 20:25:16 1979::icopo@aeslbbik.gov::287411116-5-8Fri Aug 22 03:58:37 2031::gtigjb@oundjfu.org::1945108717-6-7Tue Jan 23 07:34:12 1979::tatxg@nztitfrkc.net::285896052-5-9Tue May 29 17:25:57 1973::uohh@qxhwzrpu.gov::107515557-4-8Thu Feb  1 05:44:21 1973::quiafo@lmltvmi.gov::97364661-6-7Sun Feb 26 04:46:30 1984::ynpvvju@ygdcbqkk.edu::446589990-7-8

利用生成的数据,提取星期:

#! /usr/bin/pythonimport re#p = re.compile(r'^(Mon|Tue|Wed)')p = re.compile(r'^(\w{3})')f = open('gendata.txt', 'r')for eachLine in f.readlines():	m = p.match(eachLine.strip())	if m is not None:		print m.groups()f.close()

利用生成的数据,提取后面的数字:

在这里,如果用匹配的方法,就不得不写一个正则表达式来匹配整行内容,并用子组保存我们感兴趣的那部分数据,在这里用搜索的方法更合适。

#! /usr/bin/pythonimport rep = re.compile(r'\d+-\d+-\d+')f = open('gendata.txt', 'r')for eachLine in f.readlines():	s = p.search(eachLine.strip())	if s is not None:		print s.group()f.close()

如果用匹配的方法,那么正则表达式要设计为:

r'.+(\d+-\d+-\d+)'

但是这样的设计是不行的,因为python默认是贪心匹配的,所以会出现这样的结果:

所以要修改正则表达式:

r'.+?(\d+-\d+-\d+)'

  

转载于:https://www.cnblogs.com/stemon/p/5211167.html

你可能感兴趣的文章
《IP组播(第1卷)》一1.6 组播的历史
查看>>
计算机首次通过图灵测试
查看>>
《脱颖而出——成功网店经营之道》一第2章 经营战略入门
查看>>
封装JDBC—非框架开发必备的封装类
查看>>
《FLUENT 14.0超级学习手册》——2.5 FLUENT 14.0的基本操作
查看>>
《Photoshop修色圣典——PPW专业照片修正流程与技巧》—第1章关于历史
查看>>
当我发现电脑有灵魂
查看>>
《 Apache Spark机器学习.》导读
查看>>
在openSUSE 13.1中配置FTP服务器
查看>>
如何使用 Docker 快速配置数据科学开发环境?
查看>>
《ELK Stack权威指南(第2版)》一3.6 Java日志
查看>>
C++流的streambuf详解及TCP流的实现
查看>>
《WebGL入门指南》——第1章,第1.4节本章小结
查看>>
Angular从零到一1.6 引导过程
查看>>
《iOS 6核心开发手册(第4版)》——1.1节触摸
查看>>
《C#多线程编程实战(原书第2版)》——2.5 使用AutoResetEvent类
查看>>
《量化金融R语言初级教程》一2.5 协方差矩阵中的噪声
查看>>
并发网每月TOP10文章
查看>>
黑客究竟用什么姿势偷走了你的钱? | 硬创公开课
查看>>
超越Hadoop的大数据分析之第一章介绍:为什么超越Hadoop Map-Reduce
查看>>