Python re模块-正则表达式

462 阅读2分钟

1.概况字符集----字符集

\d----[0-9](数字)
\D----[^0-9](非数字)
\w----[A-Za-z0-9_](单词字符)
\W----[^A-Za-z0-9_](特殊字符,'',\n,\r,\t都属于非单词字符)
\s(空白字符:'',\n,\r,\t)
\S(非空白字符)
.匹配除换行符\n之外其他所有字符

2.数量词

例子1:
a='python333java5554php'
非贪婪模式
想要匹配出python,java,php
使用re.findall('[a-z]{3,6}',a)
-------------------------------------
python默认是非贪婪模式通过?强制转换为贪婪模式
re.findall('[a-z]{3,6}?',a)等同于re.findall('[a-z]{3}',a)

例子2:
a='pytho0python1pythonn2'

*匹配0次或者无限多次
re.findall('python*',a)
结果:pytho,python,pythonn
-------------------------------------
+匹配1次或者无限多次
re.findall('python+',a)
结果:python,pythonn
-------------------------------------
?匹配0次或者1次
re.findall('python?',a)
结果:pytho,python,python


例子1与例子2中的?意义不太同
re.findall('python{1,2}',a)
结果:python,pythonn
re.findall('python{1,2}?',a)
结果:python,python
re.findall('python?',a)
结果:pytho,python,python

3.边界匹配

字符串开头用^匹配结尾用$匹配--即可完整匹配
tel='18675676567'
#验证11位
re.findall('^\d{11}$',tel)

4.组

python{3}只能代表n重复的次数
想要python重复3次可用:(python){3}或者(python){3}(JS)
()代表一个组
总结:[]中的字符代表或的关系,()中的字符代表且的关系

5.匹配模式

a='Java\n4545'
re.findall('java',a,re.I)
模式re.I:代表忽略大小写
re.S:代表.可以匹配所有字符包括换行符
re.findall('java.{1}',a,re.I)结果:空
re.findall('java.{1}',a,re.I | re.S)结果:java\n

6.正则函数

(1)re.sub:字符串的替换

0:代表无限次匹配替换 1:代表值匹配替换第一个
第二个参数可以是函数
例子1:a='Java\n4545Java'替换为python
re.sub('Java','python',a,0)

例子2:a='Java\n4545Java'中Java替换为@Java@
a='Java\n4545Java'
def convert(value):
    match1=value.group()
    return '@'+match1+'@'
r=re.sub('Java',convert,a)

例子3:a='A346B947CC'中>=5的替换为9,<5的替换为0
a='A346B947CC'
def convert(value):
    match1=value.group()
    if int(match1)>=5:
        return '9'
    else:
        return '0'
r=re.sub('\d',convert,a)

(2)re.match与re.search

match从字符串的首字母开始匹配,返回的结果为对象
search搜索整个字符串,直到找到符合匹配规则,返回的结果为对象
match与search只会匹配1次
a='346B947CC'
r=re.match('\d',a)
print(r.span())---------(0,1)
r1=re.search('d',a)
print(r.group())---------3
r2=re.findall('\d',a)-----3,4,6,9,4,7
匹配中间的内容(sds和iii中间的内容)
a='sds sdeuuu fuujjjj iii'
r=re.findall('sds(.*)iii')
a='sds sdeuuu fuujjjj iii 8787 gggg fss'
r=re.search('sds(.*)iii(.*)fss')
print(r.group(0,1,2))-----('sds sdeuuu fuujjjj iii 8787 gggg fss',' sdeuuu fuujjjj ',' 8787 gggg ')
print(r.groups())-----(' sdeuuu fuujjjj ',' 8787 gggg ')