引入正则对象Regular
import re
一、re.findall()
'''
re.findall(
pattern 匹配参数,正则表达式
, string 目标字符
, flags 模式 可以不填
)
'''
1、简单查询
r=re.findall('Python', a)
print(r)#['Python']
if len(r)>0:
print('存在')
2、字符集
'''
\d [0-9] 数字 \D [^0-9] 非数字
\w [0-9A-Za-z] 数字,英文字符 \W非数字,英文字符
\s 空白字符 \S 非空白字符
. 匹配除换行符\n外所有字符
'''
a = 'aac,abc,acc,acf,adc,afc'
r = re.findall('a[cf]c',a)#[]中间的字符关系为 '或'
print(r)
r = re.findall('a[^cf]c',a)#[]中的^为取反操作
print(r)
r = re.findall('a[c-f]c',a)#[]中的-为c到f的所有
print(r)
a='abcd123456#$%@中文'
r = re.findall('[0-9]',a)
print(r)
r = re.findall('[^0-9]',a)
print(r)
r = re.findall('[0-9A-Za-z]',a)
print(r)
3、数量词
'''
{3} 表示只匹配3个字符
{3,6} 表示匹配3~6个
'''
a='java111php22python333C44'
r=re.findall('[a-z]{3,6}',a)
print(r)
4、贪婪与非贪婪
'''
贪婪 :尽可能匹配多的字符 【默认】
非贪婪:匹配到最少字符 【字符为 ? 】
'''
a='java111php22python333C44'
r=re.findall('[a-z]{3,6}?',a)
print(r)
5、匹配
'''
*匹配后面0个字符或多个
+匹配1个字符或多个
?匹配-1个、0个
'''
a='pyth0pytho1python2pythonn3'
r=re.findall('python*',a)
print(r)
r=re.findall('python+',a)
print(r)
r=re.findall('python?',a)
print(r)
6、边界匹配
'''
^xxx 以xxx开头
xxx$ 以xxx结尾
'''
a=['123456789','123','1234567']
for x in a:
r=re.findall('^\d{4,8}$',x)
print(x,r)
7、组
'''
() 中字符关系为与
'''
a='JavaJavaJavaJavaJavaJs'
r = re.findall('(Java){3}',a)
print(r)
8、第三个参数
'''
re.I 忽略大小写
re.S 改变 . 的行为
'''
a='abc\nd'
r = re.findall('C', a, re.I)
print(r)
r = re.findall('C.{1}', a, re.I | re.S)
print(r)
二、sub 替换
'''
re.sub(pattern 匹配式
, repl 替换目标
, string 对象字符串
, count 数量
, flags) 模式
'''
a = 'abccdefgcchic'
r = re.sub('c','CC',a)
print(r)
r = re.sub('c','CC',a,1)
print(r)
1、函数动态改变
def convert(value):
print(value) #value表示字符和其位置
data=value.group()
print(data)
return '#'+data+'#'
r = re.sub('cc',convert,a)
print(r)
2、match和search
'''
match 从第一个字符开始匹配 匹配一次
search 搜索整个字符串 匹配一次
.group() 获取值
.span() 获取区间
'''
s='abce1234fgh'
r=re.match('\d',s)
print(r)
r=re.search('\d',s)
print(r.span(),r.group())
3、group组
s = 'ab 12 cd 34 ef 56'
r=re.search('ab(.*)34(.*)56',s)
print(r)
print(r.group(0)) #完整
print(r.group(1)) #第一个分组的取值
print(r.group(2)) #第二个分组的取值
r=re.findall('ab(.*)34',s) #直接获取分组
print(r)