首页 > 代码库 > python (二)正则和文件处理

python (二)正则和文件处理

1.编写验证email的正则表达式,邮箱名可以是英文字母或数字或-,_符号,邮箱后缀网址名可以是字母或数字,域名可以是com、org、edu

例如: 1111Hugo_@lester007.com即为合法的email地址

(1)match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None。常见的判断方法就是:

test = ‘用户输入的字符串‘
if re.match(r‘正则表达式‘, test):
    print(‘ok‘)
else:
    print(‘failed‘)
#!usr/bin/dev python
#coding:utf-8
import re
email = ‘1111Hugo_@lester007.com‘

f = re.match(r‘()@().(com|edu|org)‘,email)
print f

  这是首先我想到的代码,然后匹配用户名

f = re.match(r‘(\w+[-\w*]*)@([\w]*).(com|edu|org)‘,email)
#预定义字符集,可以写在[...]中
\d 代表[0-9], a\dc a1c
\D 非数字, a\Dc abc
\s 空格, a\sc a c
\S 非空字符 a\Sc aSc
\w 单词字符[a-zA-Z0-9] a\wc a1c,aec,aXc都可以匹配到
\W 非单词字符 a\Wc a c,a#c,a^c 就可以匹配到了
#数量词,可以用在字符或(...)之后。
* 匹配前一个字符0或无限次
+ 匹配前一个字符1或无限次
? 0或1次
{m} 匹配前一个字符m次 ab{2}c abbc 与预定义字符集结合起来比如 f=re.findall(r‘(\w+\s+)‘,str)就可以找到非行首的多个空格了
{m,n} 匹配一个字符m至n次,at{3,4}c 就会匹配到 atttc和attttc ,而不会匹配到atc 或者 atttttc

| 代表表达式两侧的任意匹配一个

2.利用随机函数产生一个用户的用户名密码,并利用文件将用户名和密码保存下来。
用户名一般是8-32位的,允许包含下划线,密码通常是8-16位,允许包含特殊字符
#!usr/bin/dev pyhton
#coding:utf-8

import random
import hashlib
runum = random.randint(8,32)
print runum
us = 0
usrname = ‘‘
for us in range(runum):
	us+= 1
	rs = random.choice(‘qwertyuiopasdfghjklzxcvbnm1234567890_‘)
	usrname += rs
print usrname
pword = ‘‘
rpnum = random.randint(8,16)
ps = 0
for ps in range(rpnum):
	ps += 1
	pw = random.choice(‘qwertyuiopasdfghjklzxcvbnm1234567890!@#$%^&*()-=[]\\|}{;:""?><,.\‘`~‘)
	pword += pw
print pword

  


3.密码没有加密,将密码使用md5库处理,并保存。
md5加密处理库
import hashlib
hashlib.md5(password).hexdigest()
上面已经写了,如何生成随机用户名和密码,就不重新写了,只写如何保存md5.
import hashlib
md5pword = hashlib.md5(pword).hexdigest()
print md5pword

with open(‘usrmd5p.txt‘,‘w‘) as f:
	f.write(usrname)
	f.write(‘\n‘)
	f.write(pword)
	f.write(‘\n‘)
	f.write(md5pword)
f.close()

  

4.文本处理

上个月做了一家做自然语言的公司的笔试题,我觉得题目还是有点意思的,要求如下:

  1. 去除所有标点符号;需要去除的标点符号是如下几种: , . ! ? : ;

  2. 所有数字包括小数,整数,负数都替换成一个替代字符串: ==NUMBER==

  3. 所有大写字母全部转成小写

  4. 去除每行起始的所有空格

  5. 连续的空格缩短为单独的空格(除每行起始连续空格,见以上规则4

  6. 如果经过上述处理导致一行为空,则在此行处放置标记字符串:[REMOVED] 

文本有点长,我放在网盘上了:https://pan.baidu.com/s/1o8mdXd4

<style>h2 { margin-top: 0.46cm; margin-bottom: 0.46cm; direction: ltr; line-height: 173%; text-align: justify; page-break-inside: avoid; orphans: 0; widows: 0 } h2.western { font-family: "DengXian Light", serif; font-size: 16pt } h2.cjk { font-family: "DengXian Light"; font-size: 16pt } h2.ctl { font-family: ; font-size: 16pt } p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orphans: 0; widows: 0 }</style>

python (二)正则和文件处理