1. 程式人生 > >《python核心編程》——正則表達式學習筆記(課後練習)

《python核心編程》——正則表達式學習筆記(課後練習)

返回 gin write tld d+ 匹配 yahoo .py lin

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+.?)+, [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核心編程》——正則表達式學習筆記(課後練習)