目录
一、偏函数
1.偏函数什么?
偏函数作用于函数固定属性的函数,作用就是把一个函数某些参数固定住(设置默认值),返回一个新的函数,通过设定参数的默认值,可以降低这个新函数调用的难度。
2.例 :int()函数进行字符串转换,默认按十进制
print(int('12345'))
print('转换成八进制',int('12345',base=8)) #base参数,控制进制
print('转换成十六进制',int('12345',base=16))
#将10101按照二进制转换成整数
print(int('10101',base=2))
print(int('101010',base=2))
#base=2,大量使用,每次定义过于麻烦,定义一个新函数,将base=2固定
def new_int(x):
return (int(x,base=2))
print(new_int('10101'))
print(new_int('10101010'))
#直接利用偏函数partial进行
from functools import partial
new_int=partial(int,base=2) #参数为,调用的函数以及函数中需要固定的参数
print(new_int('1010101'))
二、正则表达式
1>什么是正则表达式?
正则表达式是对字符串操作的一种逻辑公式,即用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑,正则表达式是一种文本模式,模式描述在搜索文本时要匹配一个或多个字符串。
2>正则表达式的作用:
1>检查给定字符串是否符合正则表达式过滤逻辑
2>从字符串中截取想要部分
3>对目标字符串进行替换
1、正则表达式的使用(match函数)
通过标准库中的re模块进行使用--re模块中match函数:从字符串起始位置匹配一个模式,如果不是起始位置匹配成功,进返回None,语法格式:
re.match(pattern,string,flags=0)
import re
s='Hello!I am Li Hua.How are you?'
pattern='Hello'
r=re.match(pattern,s)
print(r)
print(r.group())#返回匹配的字符串
#flags参数的使用
s='Hello!I am Li Hua.How are you?'
pattern='hello'
r=re.match(pattern,s,flags=re.I)
print(r)
print(r.group())
2、正则表达式常用字符
符号 | 说明 |
. | 匹配任意一个字符(除了\n) |
[] | 匹配列表中字符 |
\w | 匹配字母、数字、下划线,即a-z,A-Z,0-9,_ |
\W | 匹配不是字母、数字、下划线 |
\s | 匹配空白字符,即空格(\n, \t) |
\S | 四配不是空白的字符 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字的字符 |
import re
print("-----.的使用-----")
s='abc'
pattern='.'
print(re.match(pattern,s))
m='\n'
pattern='.'
print(re.match(pattern,m))
print("-----\s的使用-----")
s='abcd'
pattern='\s'
print(re.match(pattern,s))
m='\n'
pattern='\s'
print(re.match(pattern,m))
-----.的使用-----
<re.Match object; span=(0, 1), match='a'>
None
-----\s的使用-----
None
<re.Match object; span=(0, 1), match='\n'>
3、正则表达式常用限定符
符号 | 描述 |
* | 匹配0次或多次 |
+ | 匹配一次或多次 |
? | 匹配一次或0次 |
{m} | 重复m次 |
{m,n} | 重复m到n次 |
{m,} | m到任意次 |
例:
import re
#匹配一个字符串,首字母为大写,其余均为小写(可有可无)
pattern='[A-Z][a-z]*'
s='Hello!I am Li Hua.How are you?'
print(re.match(pattern,s))
#匹配有效变量名(字母、数字(不能开头)下划线)
pattern='[A-Za-z_][A-Za-z_0-9]*'
s='Abc12aa'
print(re.match(pattern,s))
#匹配出1-99数字
pattern='[1-9]\d?'
s='34'
print(re.match(pattern,s))
#匹配一个随机密码8-20位
pattern='\w{8,20}'
s='AfG34191'
print(re.match(pattern,s))
<re.Match object; span=(0, 5), match='Hello'>
<re.Match object; span=(0, 7), match='Abc12aa'>
<re.Match object; span=(0, 2), match='34'>
<re.Match object; span=(0, 8), match='AfG34191'>
例二:原生字符的使用
#转义字符使用:输出\t,\n print('\\t\\n') import re pattern=('\\t\d*') s='\t1234' print(re.match(pattern,s))
4、正则表达式边界字符使用
字符 | 说明 |
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
\b | 匹配一个单词边界 |
\B | 匹配非单词边界 |
例:
import re
#匹配qq邮箱
print("-----$的使用-----")
qq="2789075634@qq.com.cn" #边界未限定
pattern='[1-9]\d{4,9}@qq.com'
print(re.match(pattern,qq))
#完善
s="2789075634@qq.com.cn"
pattern='[1-9]\d{4,9}@qq.com$'
print(re.match(pattern,s))
print("-----\\b匹配单词边界-----")
pattern=r'.*\bac'
s='account'
print(re.match(pattern,s))
5、正则表达式的使用(search函数)
1.search在一个字符串中搜索满足文本模式的字符串
re.search(pattern,string,flags=0)
2.search函数于match函数区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
例:
import re
pattern='is'
s='This is a dog.'
print(re.match(pattern,s))
print(re.search(pattern,s))
None
<re.Match object; span=(2, 4), match='is'>
6、择一匹配符
1.search方法用于搜索一个字符串,要想搜索多个字符串,最简单的方法是在文本模式字符串中使用择一匹配符号 (|)。择一匹配符号和逻辑或类似,只要满足任何一个,就算匹配成功。
2.例:匹配0-100数字
import re pattern='[1-9]\d?|0|100$' s='0' print(re.match(pattern,s))
3.(|)与列表有通用效果,[xyz]和x|y|z|都是三者择一
7、正则表达式中的分组
字符 | 说明 |
(ab) | 将括号中的字符作为一个分组 |
\num | 引用分组num匹配到的字符串 |
(?p<name>) | 分别起组名 |
(?p=name) | 引用别名为name分组匹配到的字符串 |
import re
print('匹配出网页标签内的数据')
pattern=r'<(.+)><(.+)>.+</\2></\1>'
s='<html><head>head部分</head></html>'
print(re.match(pattern,s))
print('----(?P<name>)分别起组名----')
pattern=r'<(?P<k_html>.+)><(?P<k_head>.+)>.+</(?P=k_head)></(?P=k_html)>'
s='<html><head>head部分</head></html>'
print(re.match(pattern,s))
匹配出网页标签内的数据
<re.Match object; span=(0, 32), match='<html><head>head部分</head></html>----(?P<name>)分别起组名----
<re.Match object; span=(0, 32), match='<html><head>head部分</head></html>