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


  
#!usr/bin/dev python
#coding:utf-8
import os
import re
def stre(s):
	s = re.sub(r'(^\ +)','',s)
	s = re.sub(r'(\ +)',' ',s)
	s = re.sub(r'([,+.+!+?+:+;+])','',s)
	s = re.sub(r'(\d+)','==NUMBER==',s)
	
	if s == '':
		s = '[REMOVED]'
	elif s == None:
		s = '[REMOVED]'
	s = s.lower()
	with open('test_output.txt','a+') as fw:
		fw.write(s)
with open('test_input.txt','r') as fr:
	for line in fr:
		stre(line)
#这是我用正则表达式进行处理的。


posted @ 2017-07-27 16:19  HugoLester  阅读(2398)  评论(1编辑  收藏  举报