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

Posted panpanblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《python核心编程》——正则表达式学习笔记(课后练习)相关的知识,希望对你有一定的参考价值。

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][email protected](\\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::%[email protected]%s.%s::%d-%d-%d % (dtstr, login,
              dom, choice(tlds), dtint, llen, dlen))
        str = %s::%[email protected]%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(\\[email protected](\\w+.?)+, [email protected], 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核心编程》——正则表达式学习笔记(课后练习)的主要内容,如果未能解决你的问题,请参考以下文章

python核心编程学习记录之正则表达式

Python核心编程:正则表达式

Python核心编程:正则表达式

python 学习笔记day09-pythonz正则表达式socket模块

[学] 《Python 核心编程》学习笔记

[学]《Python 核心编程》学习笔记