码迷,mamicode.com
首页 > 编程语言 > 详细

《python核心编程》——正则表达式学习笔记(课后练习)

时间:2018-04-28 16:53:48      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:数据   short   匹配   com   drive   网址   ctime   txt   名称   

1. 识别后续的字符串:“bat”,“bit”,“but”,“hat”,“hit”或者“hut”。

[bh][aiu]t

2. 匹配由单个空格分割的任意单词对,也就是姓和名。

[A-Za-z]+\s[A-Za-z]+

3. 匹配由单个逗号和单个空白符分隔的任何单词和单个字母,如姓氏的首字母

[A-Za-z]+,\s[A-Za-z]

4. 匹配所有的有效的Python标识符集合

[A-Za-z_]\w+     # 匹配任意以字母和下划线开头,标识符可以包括字母,下划线和数字。

5. 根据美国接到地址格式,匹配街道地址。美国街道地址使用如下格式:1180 Bordeaux Drive。使你的正则表达式足够灵活,以支持多单词的街道名称,如3120 De la Cruz Boulevard

\d+[a-zA-Z\s]+

6. 匹配以“www”起始且以“.com”结尾的简单Web域名:例如,www://www.yahoo.com。

^www[^\s]+[com|edu|net]$ 

7. 匹配所有能够表示Python整数的字符串集

[-+]?\d+            # 有正负符号或无

8. 匹配所有能够表示Python长整数的字符串集

[-+]?\d+[lL]        # 长整型,整数后面跟大写或小写的L

9. 匹配所有能够表示Python浮点数的字符串集

[-+]?\d+\.\d*

10. 表示所有能够表示Python复数的字符集

-?\d+\+[\+-]\d+j

11. 匹配所有能够表示有效电子邮件的集合

[^\s]+@(\w+\.?)+

12. 匹配所有能够表示有效网址的集合(URL)

(http://([A-Za-z0-9\-]+\.?)+)

13. 创建一个能从字符串中提取实际类型名称的正则表达式。函数将对于<type ‘int‘>字符串返回int

<type\s\(\w+)\‘>

14. 处理日期,常见一个正则表达式来表示标准日历中剩余三个月的数字

1[012]

15. 处理信用卡号码

(\d{4}-\d{6}-\d{5}|\d{4}-\d{4}-\d{4}-\d{4})

16. 为gendata.py更新代码,是数据直接输出到redata.txt而不是屏幕

# !/usr/bin/env python
# gendata.py

from random import randrange, choice
from string import ascii_lowercase as lc

# from sys import int
from time import ctime

tlds = (com, edu, net, org, gov)
with open(‘path\redata.txt, w) as fp:
    for i in range(randrange(5,11)):
        dtint = randrange(2**32)                        # pick date
        dtstr = ctime(dtint)                            # date string
        llen = randrange(4, 8)                          # login is shorter
        login = ‘‘.join(choice(lc) for j in range(llen))
        dlen = randrange(llen, 13)                      # domain is longer
        dom = ‘‘.join(choice(lc) for j in range(dlen))
        print(%s::%s@%s.%s::%d-%d-%d % (dtstr, login,
              dom, choice(tlds), dtint, llen, dlen))
        str = %s::%s@%s.%s::%d-%d-%d % (dtstr, login,
               dom, choice(tlds), dtint, llen, dlen)
        fp.write(str+\n)

 

17. 判断redata.txt中一周的每一天出现的次数

import re

week = {"Mon": 0, "Tue": 0, "Wed": 0, "Thu": 0, "Fri": 0, "Sat": 0, "Sun": 0}

with open(‘path\redata.txt, r) as fp:
    data = fp.readlines()
    for line in data:
        day = re.match(^\w{3}, line)
        key = day.group()
        week[key] = week[key] + 1

print(week)

18. 提取

# 判断数据是否损坏Sat Jun 22 09:14:03 1985::
import re

with open(‘path\redata.txt, r) as fp:
    data = fp.readlines()
    for line in data:
        time = re.match(^\w{3}\s\w{3}\s{1,2}\d{1,2}\s\d{2}:\d{2}:\d{2}\s\d{4}, line)
        if time is not None:
            print(未损毁)
        else:
            print(存在数据损毁)

19-25. 创建正则表达式

# 19-27练习
import re


times = []
emails = []
months = []
years = []
clocks = []
lnames = []
dnames = []
with open(path\redata.txt, r) as fp:
    data = fp.readlines()
    for line in data:
        time = re.match((\w{3}\s(\w{3})\s{1,2}\d{1,2}\s(\d{2}:\d{2}:\d{2})\s(\d{4}))::((\w+)@((\w+\.?)+))::, line)  # 提取时间戳
        if time is not None:
            times.append(time.group(1))            # 提取完整时间戳
            months.append(time.group(2))           # 提取月份
            years.append(time.group(4))            # 提取年份
            clocks.append(time.group(3))           # 提取时间
            emails.append(time.group(5))           # 提取邮件
            lnames.append(time.group(6))           # 提取登录名
            dnames.append(time.group(7))           # 提取域名
print(完整时间:, times)
print(月份:, months)
print(年份:, years)
print(时间点:, clocks)
print(邮件地址:, emails)
print(登录名:, lnames)
print(域名:, dnames)

结果:

技术分享图片

26. 使用自己的电子邮件地址替换没一行数据中的电子邮件地址

import re

with open(path\redata2.txt, r) as fp:
    data = fp.readlines()
    for line in data:
        print(re.sub(\w+@(\w+.?)+, lullaby@163.com, line).rstrip())

结果:

技术分享图片

27. 从时间戳中提取月、日、年,然后以“月、日、年”的格式。

import re

f = open(redata.txt,r)
with open(path\redata2.txt, r) as fp:
    data = fp.readlines()
    for line in data:
        m = re.match(^\w{3}\s(\w{3})\s{1,2}(\d{1,2})\s\d{2}:\d{2}:\d{2}\s(\d{4}), line)
        print(%s,%s,%s % (m.group(1), m.group(2), m.group(3)))

结果:

技术分享图片

 

《python核心编程》——正则表达式学习笔记(课后练习)

标签:数据   short   匹配   com   drive   网址   ctime   txt   名称   

原文地址:https://www.cnblogs.com/panpanblog/p/8965004.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!