import re
#### re模块简介 ####
# 例子中pattern位置是一个字符串,使用时是一个正则表达式
r"""
re.match函数
格式:match(pattern, string, flags=0)
参数:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式
re.I 忽略大小写
re.L 做本地化识别
re.M 多行匹配,影响^和$
re.S 是.匹配包括换行符在内的所有字符
re.U 根据Unicode字符解析字符,影响\w, \W, \b, \B
re.X 使更灵活的方式理解正则表达式
功能:尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配,返回None
"""
# www.baidu.com
print(re.match("www", "wwW.baiud.com", flags=re.I))
print("- - - - - - -")
r"""
re.search函数
格式:search(pattern, string, flags=0)
参数:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位
功能:扫描整个字符串,返回第一个成功匹配
"""
print(re.search("raven", "which Raven is true raven", flags=re.I))
print("- - - - - - -")
r"""
re.findall函数
格式:findall(pattern, string, flags=0)
参数:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位
功能:扫描整个字符串,返回所有匹配值
"""
print(re.findall("raven", "which Raven is true raven", flags=re.I))
print("- - - - - - -")
import re
#### pattern正则表达式 ####
# 匹配单个字符
r"""(字符串前面加r表示使用真实字符,不作转义。例如\t为真实字符,不作为制表符。)
"." 匹配除换行符以外的字符。
[] 字符集合,匹配中括号中任意一个包含的字符。
[a-z] 匹配任意一个小写字母。
[A-Z] 匹配任意一个大写字母。
[0-9] 匹配任意一个数字。
[0-9a-zA-Z] 匹配任意一个大写字母、小写字母、数字。
[0-9a-zA-Z_]匹配任意一个大写字母、小写字母、数字和下划线。
[^sam] 匹配除了's', 'a', 'm'这几个字母外所有字符。
^为脱字符,表示不匹配集合中的字符。
\d 相当于[0-9]。
\D 相当于[^0-9]。
\w 相当于[0-1a-zA-Z_]数字字母和下划线。
\W 相当于[^0-9a-zA-Z_]非数字、字母和下划线。
\s [ \f\n\r\t]匹配任意空白字符(空格,换行,回车,换页,制表)。
\S [^ \f\n\r\t]匹配任意非空白字符(空格,换行,回车,换页,制表)。
"""
# 匹配多个字符
"""
(xyz) xyz作为一个整体匹配。
x? 匹配0个或者1个x。
x* 匹配0个或者任意多个x(.*表示匹配0个或者任意多个字符,换行符除外)。
x+ 匹配至少一个x
x{n} 匹配n个x
x{n,m} 匹配至少n个至多m个x
x|y 匹配x或者y
"""
# 注释: part2
str = " part2 "
# 第2,3个/为转义字符,表示*作为字符串,并不是正则表达式
print(re.findall("/", str))
#### finditer函数 ####
import re
"""
re.finditer函数
格式:finditer(patter, string, flags)
功能:与findall类似,扫描整个字符串,返回一个迭代器。
参数:
patter:匹配的正则表达式
string:匹配的字符串
flags:标志位
"""
str = "sam is a good man, sam is a nice man, sam is a very handsome man!"
d = re.finditer(r"(sam)", str)
while True:
try:
l = next(d)
print(l)
except StopIteration as e:
break
#### 替换字符串 ####
import re
"""
字符串的替换和修改
sub(pattern, repl, string, count=0, flags=0)
subn(pattern, repl, string, count=0, flags=0)
参数:
pattern: 正则表达式
repl: 指定的用来替换的字符串
string: 字符串
count: 最多替换次数
flags: 标志位
功能:在目标字符串中用正则表达式的规则匹配字符串,
并替换成指定的字符串,如果不指定次数则匹配替换全部字符换
区别:sub返回被替换的字符串
subn返回一个元组,第一个元组为被替换的字符串,第二个元组为替换次数
"""
str = "sam is a good man, sam is a nice man, sam is a very handsome man!"
sub = re.sub("sam", "Tom", str, count=2)
subn = re.subn("sam", "Tom", str, count=1)
print(sub)
print(subn)
"""
装饰器
是一个模块,把一个函数当做一个参数返回一个替代版的函数
本质上是一个返回函数的函数
"""
#### 简单的装饰器 ####
def func1():
print("this is func1.")
def outer(func):
def inner():
print("*******************")
func()
return inner
f = outer(func1)
f()
#### 复杂一点的装饰器,带一个参数 ####
def outer(func):
def inner(age2):
if age2 < 0:
age2 = 0
func(age2)
return inner
#使用@将装饰器应用到函数中
#@outer相当于say = outer(say)
@outer
def say(age1):
print("i am %d years old" % (age1))
say(-100)
#### 通用装饰器 ####
"""
def outer(func):
def inner(*args, **kwargs):
#添加修饰的功能
func(*args, **kwargs)
return inner
"""
def outer(func):
def inner(*args, **kwargs):
print("$$$$$$$$$")
func(*args, **kwargs)
return inner
@outer
def say(name, age):
print("my name is %s, i am %d years old." % (name, age))
say("sam", 18)
"""
异常处理
当程序遇到错误,越过错误继续向下执行
try - except - else
格式:
try:
语句t
except 错误代码 as e:
语句2
except 错误代码 as e:
语句
... ...
except 错误代码 as e:
语句n
else:
语句e
注意:else语句可有可无
except可以不写错误代码。
使用except带着多种异常except(错误码1, 错误码2)
作用:用来检测try语句块中的错误,从而让except语句捕获错误信息
逻辑:当程序执行到try - except - else语句时
执行到try出现错误,匹配错误码对应的语句
没有错误,执行else语句
try - except - finally
作用:无论是否有错误,都执行finally语句
finally:
语句
"""
try:
print(3 / 1)
except ZeroDivisionError as e:
print("1")
#### re模块简介 ####
# 例子中pattern位置是一个字符串,使用时是一个正则表达式
r"""
re.match函数
格式:match(pattern, string, flags=0)
参数:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式
re.I 忽略大小写
re.L 做本地化识别
re.M 多行匹配,影响^和$
re.S 是.匹配包括换行符在内的所有字符
re.U 根据Unicode字符解析字符,影响\w, \W, \b, \B
re.X 使更灵活的方式理解正则表达式
功能:尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配,返回None
"""
# www.baidu.com
print(re.match("www", "wwW.baiud.com", flags=re.I))
print("- - - - - - -")
r"""
re.search函数
格式:search(pattern, string, flags=0)
参数:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位
功能:扫描整个字符串,返回第一个成功匹配
"""
print(re.search("raven", "which Raven is true raven", flags=re.I))
print("- - - - - - -")
r"""
re.findall函数
格式:findall(pattern, string, flags=0)
参数:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位
功能:扫描整个字符串,返回所有匹配值
"""
print(re.findall("raven", "which Raven is true raven", flags=re.I))
print("- - - - - - -")
import re
#### pattern正则表达式 ####
# 匹配单个字符
r"""(字符串前面加r表示使用真实字符,不作转义。例如\t为真实字符,不作为制表符。)
"." 匹配除换行符以外的字符。
[] 字符集合,匹配中括号中任意一个包含的字符。
[a-z] 匹配任意一个小写字母。
[A-Z] 匹配任意一个大写字母。
[0-9] 匹配任意一个数字。
[0-9a-zA-Z] 匹配任意一个大写字母、小写字母、数字。
[0-9a-zA-Z_]匹配任意一个大写字母、小写字母、数字和下划线。
[^sam] 匹配除了's', 'a', 'm'这几个字母外所有字符。
^为脱字符,表示不匹配集合中的字符。
\d 相当于[0-9]。
\D 相当于[^0-9]。
\w 相当于[0-1a-zA-Z_]数字字母和下划线。
\W 相当于[^0-9a-zA-Z_]非数字、字母和下划线。
\s [ \f\n\r\t]匹配任意空白字符(空格,换行,回车,换页,制表)。
\S [^ \f\n\r\t]匹配任意非空白字符(空格,换行,回车,换页,制表)。
"""
# 匹配多个字符
"""
(xyz) xyz作为一个整体匹配。
x? 匹配0个或者1个x。
x* 匹配0个或者任意多个x(.*表示匹配0个或者任意多个字符,换行符除外)。
x+ 匹配至少一个x
x{n} 匹配n个x
x{n,m} 匹配至少n个至多m个x
x|y 匹配x或者y
"""
# 注释: part2
str = " part2 "
# 第2,3个/为转义字符,表示*作为字符串,并不是正则表达式
print(re.findall("/", str))
#### finditer函数 ####
import re
"""
re.finditer函数
格式:finditer(patter, string, flags)
功能:与findall类似,扫描整个字符串,返回一个迭代器。
参数:
patter:匹配的正则表达式
string:匹配的字符串
flags:标志位
"""
str = "sam is a good man, sam is a nice man, sam is a very handsome man!"
d = re.finditer(r"(sam)", str)
while True:
try:
l = next(d)
print(l)
except StopIteration as e:
break
#### 替换字符串 ####
import re
"""
字符串的替换和修改
sub(pattern, repl, string, count=0, flags=0)
subn(pattern, repl, string, count=0, flags=0)
参数:
pattern: 正则表达式
repl: 指定的用来替换的字符串
string: 字符串
count: 最多替换次数
flags: 标志位
功能:在目标字符串中用正则表达式的规则匹配字符串,
并替换成指定的字符串,如果不指定次数则匹配替换全部字符换
区别:sub返回被替换的字符串
subn返回一个元组,第一个元组为被替换的字符串,第二个元组为替换次数
"""
str = "sam is a good man, sam is a nice man, sam is a very handsome man!"
sub = re.sub("sam", "Tom", str, count=2)
subn = re.subn("sam", "Tom", str, count=1)
print(sub)
print(subn)
"""
装饰器
是一个模块,把一个函数当做一个参数返回一个替代版的函数
本质上是一个返回函数的函数
"""
#### 简单的装饰器 ####
def func1():
print("this is func1.")
def outer(func):
def inner():
print("*******************")
func()
return inner
f = outer(func1)
f()
#### 复杂一点的装饰器,带一个参数 ####
def outer(func):
def inner(age2):
if age2 < 0:
age2 = 0
func(age2)
return inner
#使用@将装饰器应用到函数中
#@outer相当于say = outer(say)
@outer
def say(age1):
print("i am %d years old" % (age1))
say(-100)
#### 通用装饰器 ####
"""
def outer(func):
def inner(*args, **kwargs):
#添加修饰的功能
func(*args, **kwargs)
return inner
"""
def outer(func):
def inner(*args, **kwargs):
print("$$$$$$$$$")
func(*args, **kwargs)
return inner
@outer
def say(name, age):
print("my name is %s, i am %d years old." % (name, age))
say("sam", 18)
"""
异常处理
当程序遇到错误,越过错误继续向下执行
try - except - else
格式:
try:
语句t
except 错误代码 as e:
语句2
except 错误代码 as e:
语句
... ...
except 错误代码 as e:
语句n
else:
语句e
注意:else语句可有可无
except可以不写错误代码。
使用except带着多种异常except(错误码1, 错误码2)
作用:用来检测try语句块中的错误,从而让except语句捕获错误信息
逻辑:当程序执行到try - except - else语句时
执行到try出现错误,匹配错误码对应的语句
没有错误,执行else语句
try - except - finally
作用:无论是否有错误,都执行finally语句
finally:
语句
"""
try:
print(3 / 1)
except ZeroDivisionError as e:
print("1")