【偏函数、正则表达式】

目录

一、偏函数

二、正则表达式

         1、正则表达式的使用(match函数)

2、正则表达式常用字符

3、正则表达式常用限定符

4、正则表达式边界字符使用

5、正则表达式的使用(search函数)

6、择一匹配符

7、正则表达式中的分组

一、偏函数

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

In my opinion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值