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. 包含在[]中的一个或者多个字符被称为字符 ...
随机推荐
- sql server数据同步方案-日志传送
1 功能描述 本方案采用日志传送模式,把核心数据库(主数据库)定期同步到灾备数据库(辅助服务器)及备份库(辅助服务器,便于其他系统使用,减轻主数据压力),期间,如果发生异常导致无法同步,将以电子邮件. ...
- Spring整合Hibernate 一 - 注入SessionFactory
Spring3 整合 Hibernate4 - 注入SessionFactory 版本: spring-framework-3.2.4.RELEASE hibernate-release-4.2.5. ...
- C#调用SAPWebService
其实和调用其它WebService 没有很大不同 只是不了解SAP的人 可能不太明白 SAP接口中的相关参数 //调用接口 , 创建对象 ServiceReference1.Z_IF_MM_VEND ...
- 图的深度优先遍历的实现 c/c++ DFS
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h&g ...
- [转载]提升进程权限-OpenProcessToken等函数的用法
GetCurrentProcessID 得到当前进程的ID OpenProcessToken 得到进程的令牌句柄LookupPrivilegeValue 查询进程的权限 AdjustTokenPriv ...
- MySQL 初学笔记 ② -- MySQL安装
1. Ubuntu安装 sudo apt-get install mysql-server //安装mysql服务 sudo apt-get install mysql-client // sudo ...
- 使用SelectClipRgn注意事项
SelectClipRgn 函数功能:该函数选择一个区域作为指定设备环境的当前剪切区域. 函数原型:int SelectClipRgn(HDc hdc, HRGN hrgn): 参数: hdc:设备环 ...
- SQL Server 对象
第一项:重命名对象 execute sp_rename @objname='Nums',@newname ='Numbers',@objtype ='object'; go 这里要特别小心 @ne ...
- idea编译工程时出现Error:java: 无效的目标发行版: 1.8
见图,从上述可以看出工程用的jdk1.7,而idea编译时采用的是1.8版本(应该idea新版本内置的jre是1.8吧,默认编译采用1.8) 修改:如下图 http://blog.csdn.ne ...
- 命令行解释器(shell)
unix> ./hello hello world unix> ll 显示当前目录下文件信息. shell为命令行解释器,第一个单词可以是内置的外壳命令,也可以是一个可执行文件名.