中国大学MOOC实用Python程序设计学习笔记和课后测试第9周(北京大学)
前情链接:
中国大学MOOC实用Python程序设计学习笔记和课后测试1-3周(北京大学)
中国大学MOOC实用Python程序设计学习笔记和课后测试4-5周(北京大学)
中国大学MOOC实用Python程序设计学习笔记和课后测试6-7周(北京大学)
中国大学MOOC实用Python程序设计学习笔记和课后测试第8周(北京大学)
第9周 正则表达式
正则表达式函数
re.match(pattern,string,flag=0)
re.search(pattern,string,flag=0)
re.findall(pattern,string,flag=0)
re.finditer(pattern,string,flag=0)
re.sub()
正则表达式举例
简化正则表达式
课后测试题
提交答案合格
有整数
#048找出所有整数
import re
m='[0-9]\d*|0'
#或者m='[0-9]+'
while True:
try:
s=input()
lst=re.findall(m,s)
for x in lst:
print(x)
except:
break
049 找出所有整数和小数
#049找出所有整数和小数
import re
m='-?([0-9]+\.[0-9]+|[0-9]+)'
while True:
try:
s=input()
lst=re.findall(m,s)
for x in lst:
print(x)
except:
break
050 找出小于100的整数
import re
m = r"(^|[^0-9-])(\d{1,2})([^0-9]|$)"
for i in range(2):
s = input()
lst = re.findall(m,s)
for x in lst:
print(x[1])
051 密码判断
#051密码判断
import re
m=r'[a-zA-Z][a-zA-Z0-9_-]{7,}\Z'
while True:
try:
s = input()
if re.match(m,s) != None:
print("yes")
else:
print("no")
except:
break
052 寻找h3
#052寻找h3
import re
m=r'(?<=h3>)\w+(?=</h3>)'
for x in re.findall(m,"cdef<h3>abd</h3><h3>bcK</h3><h3>123</h3>KJM"):
print(x)
053:找<>中的数
#053找尖括号里的数
#053找尖括号里的数
import re
m='(?<=<)[1-9]\d{0,2}(?=>)|(?<=<)0(?=>)'
n=int(input())
for i in range(n):
j=input()
if re.findall(m,j):
for x in re.findall(m,j):
print(x,end=' ')
else:
print('NONE',end='')
print('\n', end='')
054 电话号码
提示
1) tag中间可以有任何文字,比如 xddd也是一个合法tag
2) 在分组的右边可以通过分组的编号引用该分组所匹配的子串
m = r’(((ab*)c)d)e\3’ #要求 ab*cde后面跟着第三分组的内容
r = re.match(m,“abbbcdeabbbkfg”) # 后面的bbb少一个b则不能匹配,因为第三分组是abbb
print(r.group(3)) # abbb
print(r.group()) # abbbcdeabbb
3) 如果一个正则表达式搞不定,可以先用一个正则表达式抽取某个中间结果,再在中间结果里面手工或者用另外的正则表达式进一步分析
代码暂不提供,本题有难度,不会写可以先不写,学习其他章节内容。