Python初学9-正则匹配

引入正则对象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)











猜你喜欢

转载自blog.csdn.net/qq_34819372/article/details/80665402