python基础语法六-正则匹配

书接上回:

python基础语法一-基本数据类型

python基础语法二-多维数据类型

python基础语法三-类

python基础语法四-数据可视化

python基础语法五-函数

1. 符号含义

[]

里面的字符是或的关系,外面的字符是与的关系

例如:re.findall('d[hf]g', str) #查找dhg/dfg

^

非 ; 例如:re.findall('d[^hf]g', str) #查找非dhg/非dfg

{}

里面的内容是字符的长度

例如:re.findall('[a-zA-Z]{1,3}', str) #查找英文单词,长度在1-3之间,当长度超过3时会切割,比如PPTWORD就会切割成'PPT'、'WOR'、'D'

\d

数字

例如:re.findall('[\d]', str)

\D

除数字之外的字符

例如:re.findall('[\D]', str)

\w

中文、英文、数字、下划线,不能是特殊字符

\W

特殊字符(包括逗号,*号,小括号,#号,\t,\n,$等)

\s

空白字符(包括空格,换行,制表符等)

\S

非空白字符

*

匹配0次或无数次

+

匹配1次或无数次

匹配0次或1次

.

匹配任意单个字符,除了换行符

.并且加上re.S

匹配任意单个字符,包括换行符

例如:re.findall('dfg.',any_string,re.S)

re.I

忽略大小写

2. 几个常用匹配

(1)查找所有数字/部分数字

所有数字:[0-9]或者[\d]

部分数字:[1-3 6 9]

(2)查找除数字以外的字符

[^0-9]或者[\D]

(3)查找固定+随机字符

'd[hf]g' #dhg/dfg

(4)查找所有英文字符

[a-zA-Z]

(5)匹配正整数

^[1-9]\d*

(6)匹配负整数

^-[1-9]\d*

(7)匹配整数

^-?[1-9]\d*

(8)匹配非负整数

^[1-9]\d*|^0

3. 查找字符re.findall

用法:lst = re.findall(正则匹配表达式,要查找的字符串对象)

re.findall返回的是列表

4. 边界匹配

4

tel = 'a13086618091b7364bds9373747654893ndd03874747637308475'

tel1 = re.findall('\d{11}', tel) #查找连续11个数字

print('19:',tel1)  #['13086618091', '93737476548', '03874747637']

tel2 = re.findall('^\d{11}', tel) #从开始位置进行11个数字匹配

print('20:',tel2)  #[]

tel3 = re.findall('\d{11}$', tel) #从结尾位置进行11个数字匹配

print('21:',tel3)  #['47637308475']

tel4 = re.findall('^\d{11}$', tel) #开始和结尾之间只能有11个数字

print('22:',tel4)  #[]

5. group

5

group = 'abcxyz123abcabcdhg456abcabcxyzabcabcabc'

group1 = re.findall('(abc)',group) # 提取出所有的abc,()里是与的关系,是组

print('23:',group1)  #['abc', 'abc', 'abc', 'abc', 'abc', 'abc', 'abc', 'abc']

group11 = re.findall('abc',group)

print('23333:',group11)  #['abc', 'abc', 'abc', 'abc', 'abc', 'abc', 'abc', 'abc']

group2 = re.findall('(abc){3}',group) # 提取出连续3个的abc合成1

print('24:',group2)  #['abc']

group3 = re.findall('(abc)(xyz)',group)

print('25:',group3)  #[('abc', 'xyz'), ('abc', 'xyz')]

# 分组

group4 = re.search('([a-z]*)([0-9]*)([a-z]*)',group) #任意个数小写字母+任意个数数字+任意个数字母

print('26:',group4.group()) #显示所有组abcxyz123abcabcdhg

print('27:',group4.group(0)) #显示所有组abcxyz123abcabcdhg

print('28:',group4.group(1)) #显示第一组abcxyz

6. 替换字符re.sub

6

replace = 'ahsa'

replace1 = re.sub('a','A',replace,1) #a替换成A,替换1/第四个参数默认是0,表示替换所有

print('30:',replace1) #Ahsa

def function1(parameter):

    pass #return 某些值

replace2 = re.sub('a',function1,replace) #a替换成函数,函数不返回任何值,所以就是把a消除

print('31:',replace2) #hs

def function2(parameter):

    newpara = parameter.group() #group()在正则表达式中用于获取分段截获的字符串

    return '$'+ newpara

replace3 = re.sub('a',function2,replace)

print('32:',replace3) #$ahs$a

range = 'gs73649bd28cb73b92b'

def func1(para):

    newpara = para.group() #注意:分段获取得到的是字符串

    if int(newpara) > 5:

        newchar = '9'

    else:

        newchar = '0'

    return newchar

range1 = re.sub('[0-9]',func1,range) #大于5替换成9,小于等于5替换成0

print('33:',range1)  #gs90909bd09cb90b90b

7. 匹配字符re.match&re.search

(1)match:匹配第一个字符,如果不匹配,返回none,匹配,返回一个对象,该对象就是匹配的结果

(2)search:从第一个字符开始匹配,如果不匹配,返回none,匹配,返回第一个匹配的对象

7

match = '7h1o293hbsk'

match1 = re.match('\d',match)

print('34:',match1)  #<re.Match object; span=(0, 1), match='7'>

print('35:',match1.group()) #返回结果:7

print('36:',match1.span()) #返回元组:(0,1),匹配位置,(01)表示从0位置开始,1位置结束

search1 = re.search('\d',match)

print('37:',search1)  #<re.Match object; span=(0, 1), match='7'>

print('38:',search1.group())#7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值