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+\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. 创建一个能从字符串中提取实际类型名称的正则表达式。函数将对于
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 ctimetlds = ('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 redays = ['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:continueif day not in days_count:days_count[day] = 1else:days_count[day] += 1print(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 mdef find_email(email):patt = r'(\w+)@(\w+)\.(\w+)'m = re.match(patt,email)return mwith 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+
转载于:https://my.oschina.net/u/3579120/blog/1507547
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
