正则表达式模块

import re

# 元字符:. ^ $ * + ? { } [ ] | ( ) 

# 通配符 . 只能代指任意一个字符,除了换行符

# ^ 只以开始来匹配

# $ 只以结尾来匹配

# * 重复匹配[0,正无穷]

# + 重复匹配[1,正无穷]

# ?  取0次或1次

# ret = re.findall('abc*?','abcccc')
# print(ret)  # ['ab'] , *+贪婪匹配后面加? ,使其成为惰性匹配


# {} 自定义范围贪婪匹配 {1,3} , {1,}:代表正无穷

    # * 等价于 {0,正无穷}
    # + 等价于 {1,正无穷}
    # ? 等价于 {0,1}


# [] 1、字符集 [c,d] c 与 d  是或的关系,取其一进行匹配
#    2、[a-z] 匹配a到z的字母范围
#    3、取消元字符的特殊功能(^-这三个符号例外), [w,*] * 在这里面代表普通字符
#    4、[^i]: ^放在[]里是取反,取不是i 的内容,[^4,5]:4和5是一组,取不是4、不是5 的内容

#  1、反斜杠后面跟元字符,去除特殊功能
#   2、反斜杠后面跟普通字符,实现特殊功能(
    # d  匹配任何十进制数;它相当于类 [0-9]。
    # D 匹配任何非数字字符;它相当于类 [^0-9]。
    # s  匹配任何空白字符;它相当于类 [ 	

fv]。
    # S 匹配任何非空白字符;它相当于类 [^ 	

fv]。
    # w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
    # W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
    #   匹配一个特殊字符边界,比如空格 ,&,#等。   r'I' 匹配I
# )

# () 分组

    # set = re.findall('www.(w+).com','www.baidu.com')
    # print(set) #['baidu']

    # set = re.findall('www.(?:w+).com','www.baidu.com')
    # print(set) # ['www.baidu.com']     ?: 取消分组优先级


# | 或的意思

# 正则表达式的方法:
# 1、 findall() 所有结果都返回到一个列表里

# 2、 search() 匹配成功后返回第一个对象,无匹配成功会报错,对象可以通过group()方法返回结果

# 3、 match() 只在字符串开始匹配,返回匹配到的第一个对象,通过group()方法返回结果

# 4、split() 字符分割

    # ret = re.split('k','abdksjl')
    # print(ret) # ['abd', 'sjl']

    # ret = re.split('[j,s]','sdjksal')
    # print(ret) # ['', 'd', 'k', 'al'] 先分割j,然后再分割s

# 5、sub() 替换

    # ret = re.sub('a','1','abca',1) # 最后面的1 表示只替换1次
    # print(ret) # 1bc1

    # ret = re.subn('d{4}$','****','410184108053')
    # print(ret) # ('41018410****', 1)  subn 后面多了一个替换的次数



# 6、compile() 编译规则,通过方法调用,方便多次调用

    # obj = re.compile('.com')
    # ret = obj.findall('abc.com')
    # print(ret) # ['.com']
    #
    # ret1 = obj.search('abc.com').group()
    # print(ret1) # .com
    #
    # ret2 = obj.split('abc.com')
    # print(ret2) # ['abc', '']
    #
    # ret2 = obj.sub('.net','abc.com')
    # print(ret2) # abc.net


    # obj = re.compile('d{4}$')
    #
    # xkzh = obj.subn('****','410184108053')
    #
    # print(xkzh)




# ret = re.findall('ww{2}l','hello world')
# print(ret) # ['worl']

# ret = re.findall('w..l','hello world')
# print(ret)  # ['worl']
#
# ret = re.findall('^h...o','hheeeodokjdhowhello')
# print(ret)  # [] ^ 只以开始来匹配,后面的不再匹配

# ret = re.findall('a..x$','alexaoixaiuooiu')
# print(ret) # [] $ 只以结尾来匹配

# ret = re.findall('a*','kjibaaaaaaa')
# print(ret) # ['', '', '', '', 'aaaaaaa', '']

# ret = re.findall('ba+','kjibaaaaaaa')
# print(ret) # ['aaaaaaa'] 匹配加号前面所有的字符

# ret = re.findall('b+a','kjibadfbafs')
# print(ret) # ['ba', 'ba']

# ret = re.findall('b?a','kjibadfbfdafs')
# print(ret) # ['ba', 'a']

# ret = re.findall('a{2}b','aaab')
# print(ret) # ['aab']

# ret = re.findall('a{1,3}b','aaaacab')
# print(ret) # ['ab']

# ret = re.findall('a[c,d,e,]x','adx')
# print(ret) # ['adx']

# ret = re.findall('a[b,c]d','a,d')
# print(ret) # ['a,d'] 逗号也代表一个字符

# ret = re.findall('a[bc]d','abcd')
# print(ret) # [] , b或c


# ret = re.findall('[a-z]','adx')
# print(ret) # ['a', 'd', 'x']

# ret = re.findall('[w,*]','awbsd*d')
# print(ret)  # ['w', '*']

# ret = re.findall('[^i]','siuJO2')
# print(ret) # ['s', 'u', 'J', 'O', '2']


# ret = re.findall('d{2}','sdjio2303829fjiejowijef')
# print(ret) # ['23', '03', '82']

# ret = re.findall('D','sd230jf')
# print(ret) # ['s', 'd', 'j', 'f']

# ret = re.findall('s','dfs dfwdsad dsdd')
# print(ret) # [' ', ' ']

# ret = re.findall('S','dfs d dd')
# print(ret) # ['d', 'f', 's', 'd', 'd', 'd']

# ret = re.findall('w','d23fs d dd')
# print(ret) # ['d', '2', '3', 'f', 's', 'd', 'd', 'd']
#
# ret = re.findall('W','d23
fs d	 dd')
# print(ret) # ['
', ' ', '	', ' ']


# ret = re.findall(r'I','Hello,I am a LI&ST')
# print(ret) # ['I', 'I']


# ret = re.findall(r'I','Hello Iam a LI&ST')
# print(ret) # ['I']

# ret = re.search('sb','fdjsksblkjiohsb')  # search 匹配出第一个满足条件的结果
# print(ret) # <_sre.SRE_Match object; span=(5, 7), match='sb'>
# print(ret.group()) # sb

# print(re.search('sb','fdjsksblkjiohsb').group()) # sb ,效果同上

# print(re.search('a.','a.ghj').group())  #  匹配不到时,group 会报错,  结果为:a.

# print(re.search('\\g','aghj').group())  #  匹配反斜杠 g

# print(re.search(r'\g','aghj').group())  #  匹配反斜杠 g


# ret = re.findall('(as)+','fjiaslijaskj')
# print(ret)  #['as', 'as']

# ret = re.findall('(as)+','fjiaslijaskj')
# print(ret)  #['as', 'as']
#
# print(re.search('(as)+','fjiaslijaskj').group()) # as

# print(re.search('(as)|3','as3').group())  # as, 取as 或 3

# ret = re.search('(?P<id>d{3})/(?P<name>w{3})','weeew34ttt123/ooo')

# print(ret.group()) # 123/ooo
# print(ret.group('id')) # 123
# print(ret.group('name')) # ooo



# ret = re.match('asd','asdasdfdjiasd').group()
# print(ret) # asd

# print('abcdddfes'.split('d')) # ['abc', '', '', 'fes']



原文地址:https://www.cnblogs.com/ihitao/p/8489297.html