Python核心编程-第十五章-习题

1.正则表达式: r"[bh][aiu]t"

2.正则表达式:r"\w+ \w+"

3.正则表达式:r"\w+, [\w]"

4.正则表达式:r"[A-Z_a-z][\w_]*"

5.正则表达式:r"\d+ [a-zA-z]+[a-zA-z ]*"

6.正则表达式:r"www\.\w+\.(com|edu|net)"

7-8.正则表达式:r"^-?(\d*)|(0[0-7]*)|(0[xX][0-9a-fA-F]+)$"

9.正则表达式:r"^\d+\.\d*$"

10.正则表达式:r"(\d+(\.\d*)?)?[\+-]?\d+j"

11.正则表达式:r"[a-zA-z][\w_]*@\w[\w-]*\.[a-zA-z]{2,}"    #假设邮件前缀可以包含字母、数字和下划线,且以字母开头

13.

# -*- coding: utf-8 -*-

import re

def gettype(val):
    typestr = str(type(val))
    mytype = re.match(r"", typestr).group(1)
    systype = type(val).__name__
    if mytype == systype:
        print u"类型是:", mytype
    else:
        print u"错误"

14.  r"1[0-2]"

15.  A. r"([0-9]{4}-?[0-9]{6}-?[0-9]{5})|(([0-9]{4}-?){4})"

      B.

def CheckCardNum(card_num):
    "检验卡号的有效性"
    import re 
    if not isinstance(card_num, str): card_num = str(card_num)
        
    m = re.match(r"([0-9]{4}-?[0-9]{6}-?[0-9]{5})|(([0-9]{4}-?){4})", card_num)
    if m is not None:
        if '-' in card_num:
            card_num = card_num.replace('-','')
        sum = 0          
        if len(card_num) == 15:
            for i, num in enumerate(card_num):
                num = int(num)
                if (i+1)%2:
                    sum += num
                else:
                    num=num*2 if num*2 < 9 else num*2-9
                    sum += num
        else:
            for i, num in enumerate(card_num):
                num = int(num)
                if (i+1)%2:
                    num=num*2 if num*2 < 9 else num*2-9
                    sum += num 
                else:
                    sum += num
        if sum%10 == 0:
            print u"卡号输入正确"
    else:
        print u"请输入正确的卡号"

16.  

#!/usr/bin/env python

from random import randint, choice
from string import lowercase
from sys import maxint
from time import ctime

f = open(r"E:\code\Core Python Programming\15\redata.txt", 'w')

doms = ('com', 'edu', 'net', 'org', 'gov')

for i in range(randint(5, 10)):
    dtint = randint(0, maxint-1)
    dtstr = ctime(dtint)
    
    shorter = randint(4, 7)
    em = ''
    for j in range(shorter):
        em += choice(lowercase)
        
    longer = randint(shorter, 12)
    dn = ''
    for j in range(longer):
        dn += choice(lowercase)
        
    eachline = '%s::%s@%s.%s::%d-%d-%d' % (dtstr, em,
        dn, choice(doms), dtint, shorter, longer)  
    
    f.writelines(eachline+'\n')
f.close()

17.  

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from random import randint, choice
from string import lowercase
from sys import maxint
from time import ctime

f = open(r"E:\code\Core Python Programming\15\redata.txt", 'w')

doms = ('com', 'edu', 'net', 'org', 'gov')

for i in range(randint(5, 10)):
    dtint = randint(0, maxint-1)
    dtstr = ctime(dtint)
    
    shorter = randint(4, 7)
    em = ''
    for j in range(shorter):
        em += choice(lowercase)
        
    longer = randint(shorter, 12)
    dn = ''
    for j in range(longer):
        dn += choice(lowercase)
        
    eachline = '%s::%s@%s.%s::%d-%d-%d' % (dtstr, em,
        dn, choice(doms), dtint, shorter, longer)   
    
    f.writelines(eachline+'\n')

f.close()
weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
f = open(r"E:\code\Core Python Programming\15\redata.txt", 'r')
datas = f.readlines()
Montimes, Tuetimes, Thutimes, Wedtimes, Fritimes, Sattimes, Suntimes = 0, \
    0, 0, 0, 0, 0, 0
times = {'Mon': Montimes, 'Tue': Tuetimes, 'Wed': Wedtimes, 'Thu': Thutimes, \
         'Fri': Fritimes, 'Sat': Sattimes, 'Sun': Suntimes}
for data in datas:
    for weekday in times:
        if weekday in data:
            times[weekday] += 1
            break
    
for weekday in weekdays:
    print u"%s 出现的次数时:%d" % (weekday, times[weekday])

18.

#!/usr/bin/env python
# -*- coding: utf-8 -*-


from random import randint, choice
from string import lowercase
from sys import maxint
from time import ctime
import re

f = open(r"E:\code\Core Python Programming\15\redata.txt", 'w')

doms = ('com', 'edu', 'net', 'org', 'gov')

for i in range(randint(5, 10)):
    dtint = randint(0, maxint-1)
    dtstr = ctime(dtint)
    
    shorter = randint(4, 7)
    em = ''
    for j in range(shorter):
        em += choice(lowercase)
        
    longer = randint(shorter, 12)
    dn = ''
    for j in range(longer):
        dn += choice(lowercase)
        
    eachline = '%s::%s@%s.%s::%d-%d-%d' % (dtstr, em,
        dn, choice(doms), dtint, shorter, longer)  
    
    f.writelines(eachline+'\n')
f.close()

f = open(r"E:\code\Core Python Programming\15\redata.txt", 'r')
check = True
patt = r"([\w :]{24})[a-z@\.:]+(\d+).*"

flines = f.readlines()
for eachline in flines:
    datadtstr = re.match(patt, eachline).group(1)
    datadtint = re.match(patt, eachline).group(2)
    if datadtstr == ctime(int(datadtint)):
        continue
    else:
        check = False
        break

if check:
    print u"数据完好!"
else:
    print u"数据有误!"

19.  patt = r"[\w :]{24}"        re.search()

20.  patt = r"[a-z]*@[a-z\.]*"   re.search()

21.  patt = r"[A-za-z ]{4}([a-zA-Z]{3})"   (re.search(patt, string).group(1))

22.  patt = r"\d{4}:"    re.search(patt, string).group()[:4]

23.  patt = r"(\d{2}:){2}\d{2}"  re.search()

24-25.  patt = r"\b[a-z]+\b"   re.findall()

26.   

newlines = []
f = open(r"redata.txt", 'r')
for eachline in f.readlines():
    newline = re.sub(r'\b[a-z]+@[a-z\.]+', 'myemail@gmail.com', eachline)
    newlines.append(newline)
f.close()
f = open(r"redata.txt", 'w')
f.writelines(newlines)

27.

f = open(r"redata.txt", 'r')
for eachline in f.readlines():
    month_day = re.findall(r'\b[A-Z][a-z]{2}\b', eachline)
    month = month_day[1]
    day = month_day[0]
    year = re.search(r'(\d{4}):', eachline).group(1)
    print '%s %s, %s' % (month, day, year)

28.  patt = r"(\d{3}-)?\d{3}-\d{4}"

29.  patt = r"((\d{3}-)|(\(\d{3}\)))?\d{3}-\d{4}"

转载于:https://my.oschina.net/u/2297516/blog/678227

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值