Python核心编程习题之——正则表达式
2017-08-14 00:00
525 查看
1. 识别后续的字符串:“bat”,“bit”,“but”,“hat”,“hit”或者“hut”。
2. 匹配由单个空格分割的任意单词对,也就是姓和名。
3. 匹配由单个逗号和单个空白符分隔的任何单词和单个字母,如姓氏的首字母
4. 匹配所有的有效的Python标识符集合
5. 根据美国接到地址格式,匹配街道地址。美国接到地址使用如下格式:1180 Bordeaux Drive。使你的正则表达式足够灵活,以支持多单词的街道名称,如3120 De la Cruz Boulevard
6. 匹配以“www”起始且以“.com”结尾的简单Web域名:例如,www://www.yahoo.com。
7. 匹配所有能够表示Python整数的字符串集
8. 匹配所有能够表示Python长整数的字符串集
9. 匹配所有能够表示Python浮点数的字符串集
10. 表示所有能够表示Python复数的字符串集
11. 匹配所有能够表示有效电子邮件的集合
12. 匹配所有能够表示有效网址的集合(URL)
13. 创建一个能从字符串中提取实际类型名称的正则表达式。函数将对于<type 'int'>字符串返回int
14. 处理日期,常见一个正则表达式来表示标准日历中剩余三个月的数字
15. 处理信用卡号码
16. 为gendata.py更新代码,是数据直接输出到redata.txt而不是屏幕
17. 判断redata.txt中一周的每一天出现的次数
18. 提取
提取每行中完整的时间戳
提取每行中完整的电子邮件
仅仅提取时间戳中的月份
仅仅提取时间戳中的年份
仅仅提取时间戳中的时
仅仅从电子邮件地址中提取登录名和域名
使用你的电子邮件地址替换每一行数据中的电子邮件地址
19. 区号 使用正则表达式匹配800-555-1212、555-1212,以及(800) 555-1212
[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+\s([a-zA-Z]+\s*)+
6. 匹配以“www”起始且以“.com”结尾的简单Web域名:例如,www://www.yahoo.com。
^www[^\s]+com$
7. 匹配所有能够表示Python整数的字符串集
[-+]?\d+
8. 匹配所有能够表示Python长整数的字符串集
[-+]?\d+[lL]
9. 匹配所有能够表示Python浮点数的字符串集
\d+\.\d*
10. 表示所有能够表示Python复数的字符串集
\d*(-\d+j)?
11. 匹配所有能够表示有效电子邮件的集合
\w+@[\w\.]+.com
12. 匹配所有能够表示有效网址的集合(URL)
http://[\w\.]+\.(com|cn)
13. 创建一个能从字符串中提取实际类型名称的正则表达式。函数将对于<type 'int'>字符串返回int
patt = r"<\w+\s'(\w+)'>" data = type(1) m = re.search(patt,data) if m: print(m.group(1))
14. 处理日期,常见一个正则表达式来表示标准日历中剩余三个月的数字
1[0-2]
15. 处理信用卡号码
\d{4}(-\d{6}-\d{5}|(-\d{4}){3})
16. 为gendata.py更新代码,是数据直接输出到redata.txt而不是屏幕
from random import randrange, choice from string import ascii_lowercase as lc from time import ctime tlds = ('com', 'edu', 'net', 'org', 'gov') for i in range(randrange(5,11)): dtint = randrange(10**10) dtstr = ctime(dtint) llen = randrange(4, 8) c = [] for j in range(llen): c.append(choice(lc)) login = ''.join(c) dlen = randrange(llen, 13) d = [] for j in range(dlen): d.append(choice(lc)) dom = ''.join(d) with open('redata.txt','a') as f: line = '%s::%s@%s.%s::%d-%d-%d' %(dtstr, login, dom, choice(tlds), dtint, llen, dlen) f.writelines(line+'\n')
17. 判断redata.txt中一周的每一天出现的次数
import re days = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'] days_count = {} with open('redata.txt','r') as f: patt = r'\w{3}' for line in f: m = re.match(patt,line) day = m.group() if day not in days: continue if day not in days_count: days_count[day] = 1 else: days_count[day] += 1 print(days_count)
18. 提取
提取每行中完整的时间戳
提取每行中完整的电子邮件
仅仅提取时间戳中的月份
仅仅提取时间戳中的年份
仅仅提取时间戳中的时
仅仅从电子邮件地址中提取登录名和域名
使用你的电子邮件地址替换每一行数据中的电子邮件地址
import re def find(line): patt = r'(\w+)\s(\w+)\s+(\d+)\s(\d+:\d+:\d+)\s(\d+)::(\w+@\w+\.\w+)::(\d+-\d+-\d+)' m = re.match(patt,line) return m def find_email(email): patt = r'(\w+)@(\w+)\.(\w+)' m = re.match(patt,email) return m with open('redata.txt','r') as f: for line in f: m = find(line) #年 year = m.group(5) #月 month = m.group(2) #日 day = m.group(3) #时间 time = m.group(4) #星期 week = m.group(1) #时间戳 timestamp = year+' '+month+' '+day+' '+time+' '+week #地址 print(timestamp) email = m.group(6) m = find_email(email) name = m.group(1) main_host = m.group(2) second_host = m.group(3) print(name,main_host,second_host)
19. 区号 使用正则表达式匹配800-555-1212、555-1212,以及(800) 555-1212
((\d+-)|(\(\d+\)\s))?\d+-\d+
相关文章推荐
- python核心编程作业--正则表达式和图形界面--电影搜索器(电影天堂)
- Python核心编程技术之正则表达式(努力更新中)
- [PYTHON]核心编程笔记(15.Python正则表达式)
- python 核心编程 正则表达式部分答案
- python核心编程-正则表达式之-重复、特殊字符、子组
- python核心编程-正则表达式之-边界匹配
- python核心编程-正则表达式之-匹配多个字符串
- python核心编程-正则表达式之-任意单个字符
- python核心编程-正则表达式之-创建字符集合
- python核心编程-正则表达式-产生测试数据
- python 核心编程 第六章习题
- python3核心编程每日习题答案
- 用正则表达式看.NET编程--.NET核心正则类详解
- python爬虫里信息提取的核心方法: Beautifulsoup、Xpath和正则表达式
- Python核心编程习题之五——GUI编程
- 用正则表达式看.NET编程--正则核心对象详解(二)
- 用正则表达式看.NET编程--正则核心对象详解(三 )
- Python编程 Python中有关正则表达式 setdefaultencoding
- 多列输出函数 《python 核心编程》习题6-19
- python 核心编程第5章(习题)