python正则表达式练习篇2
首先生成正则表达式练习的数据:
#! /usr/bin/python
from random import randint, choice
from string import lowercase
from sys import maxint
from time import ctime doms = ('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-10
Thu Apr 7 09:42:29 2033::ewanfh@znkvahbcorb.edu::1996450949-6-11
Fri Feb 9 20:25:16 1979::icopo@aeslbbik.gov::287411116-5-8
Fri Aug 22 03:58:37 2031::gtigjb@oundjfu.org::1945108717-6-7
Tue Jan 23 07:34:12 1979::tatxg@nztitfrkc.net::285896052-5-9
Tue May 29 17:25:57 1973::uohh@qxhwzrpu.gov::107515557-4-8
Thu Feb 1 05:44:21 1973::quiafo@lmltvmi.gov::97364661-6-7
Sun Feb 26 04:46:30 1984::ynpvvju@ygdcbqkk.edu::446589990-7-8
利用生成的数据,提取星期:
#! /usr/bin/python import 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/python
import re
p = 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+)'
python正则表达式练习篇2的更多相关文章
- python正则表达式入门篇
文章来源于:https://www.cnblogs.com/chuxiuhong/p/5885073.html Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写. ...
- python正则表达式练习篇
练习一: 利用who命令输出所有已经登录系统的用户的信息,并把登录名.用户登录时的电传.登录时间.登录地址利用正则表达式分割开来. 数据的格式: %who wesc console Jun 20 20 ...
- python正则表达式基础篇
1.正则表达式基础 1.1简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大 ...
- Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
- Python 正则表达式入门(初级篇)
Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写. 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达 ...
- 转载 Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
- 转载 Python 正则表达式入门(初级篇)
Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写.转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式 ...
- Python 第四篇:生成器、迭代器、装饰器、递归函数与正则表达式
一:生成器:Generator,可以理解为是一种一个函数产生一个迭代器,而迭代器里面的数据是可以通过for循环获取的,那么这个函数就是一个生成器,即生成器是有函数生成的,创建生成器使用()表示,比如g ...
- 一篇搞定Python正则表达式
1. 正则表达式语法 1.1 字符与字符类 1 特殊字符:\.^$?+*{}[]()| 以上特殊字符要想使用字面值,必须使用\进行转义 2 字符类 1. 包含在[]中的一个或者多个字符被称为字符 ...
随机推荐
- UVA 10806 Dijkstra, Dijkstra.
题意: 从起点走到终点,然后从终点走到起点,其中不能同时走过相同的一条边,问你最小路径长度.先输入终点n,起点为1,接下来输入m,代表有m条边.每条边由起点,终点,长度组成. 分析: 求最小长度,还限 ...
- sql 随机数
select FLOOR(rand()*16) 就是随机得到0到15之间的一个整数 select CEILING(rand()*15) 就是随机得到1到15之间的一个整数 FLOOR()为地板函数,取 ...
- RelativeLayout与LinearLayout的区别
1.LinearLayout是线性布局控件,它包含的子控件将以横向或竖向的方式排列,按照相对位置来排列所有的widgets或者其他的 containers,超过边界时,某些控件将缺失或消失.因此一个垂 ...
- 大数值基础、for与while循环的简单对比
- tomcat组成及原理[转]
Tomcat安装好后打开目录;可以看到如下结构: bin :存放服务器脚本; conf :存放配置文件; lib :存放需要的JAR文件; wabapps :存放需要发布的Web应用程序及其部署文件; ...
- SSH安全登录(远程管理)22端口
Linux管理Linux 先加密再发送数据,更安全 一 联机加密工具 非对称钥匙对加密 安装 默认安装 openssh 启动 ...
- Python成长之路第二篇(2)_列表元组内置函数用法
列表元组内置函数用法list 元组的用法和列表相似就不一一介绍了 1)def append(self, p_object):将值添加到列表的最后 # real signature unknown; r ...
- win8上安装 Pillow
1.确保正确安装pip(2.7.9默认安装) 2. pip install wheel 3.下载 pillow-*.whl 根据自己的电脑和python版本 地址 4.安装 pip install x ...
- A + B Problem II---hdu1002
A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 新建Android工程没有自动生成R.JAVA,应该先升级下ADT
前几天非常郁闷,本来计划在Android上做个小东西,结果打开Eclipse新建工程,发现居然没有R.JAVA! 反复测试很多次,均未成功,最后试着升级了下ADT,结果搞定,在这里记下,下次遇到这样的 ...