day15-正则表达式

1.正则表达式的符号

正则表达式:用来做字符串查找、匹配、切割用的一种工具、

1 .匹配一个任意字符

2.\w 匹配一个字符是字母、数字或者下划线

  1. \s 匹配一个空白字符(空格,回车,换行,制表符)
  1. \d 匹配一个数字字符
  1. \b 检测边界(单词边界---一般的符号都可以作为单词边界)
re_str  = r'\b...\b'
    print(re.match(re_str,'jsh,abc'))

6.^ 匹配字符串开始(^The --匹配以The开头的字符串)

re_str =r'^The'
    print(re.match(re_str,'Thewfs'))
  1. $ 匹配字符串结束
e_str = r"abc$"
    print(re.fullmatch(re_str,'abc'))
    print(re.findall(re_str,'hsksdd jksds abc'))

8.\W 匹配非字母,数字、下划线

9.\S 匹配非空白字符

10.\D 匹配非数字字符

10.\B 检测非边界

2.正则表达符号组合

1.[]匹配[]中出现的任意一个字符

'''匹配一个字符串,前面是abc',第四位字符是1或者a'''
    re_str = r'abc[1a]'
    print(re.fullmatch(re_str,'abc1'))

2.[^]匹配不在[]中出现的任意一个字符

'匹配一个字符串,前三位是abc,第四位不是数字也不是字符a的字符串'''
    re_str = r'abc[^\da]'
    print(re.fullmatch(re_str,'abcd'))

3.* 匹配0次或者多次
[0-9]:匹配0,1,2,3,4,5,6,7,8,9
[1-8]:匹配1,2,3,4,5,6,7,8,
[a-z]:匹配任意一个小写字母
[A-Z]:匹配任意一个大写字母
[a-zA-Z]: 匹配所有的字母

写一个正则表达式,判断一个字符是数字字符串

re_str = r'\d\d*'

写一个正则表达式,检测一个字符串是否是合格的标识符(字符数字下划线组成,数字不开头)

re_str = r'[a-zA-Z_]\w*'

4.:+ 匹配一次或者多次

  1. 匹配0次或者1次

//   判断一个字符串是否是正整数字符串(除0)'123'-->成功
    re_str = r'[+]?[1-9]\d*'

  1. {N} 匹配N次

7.{N,}匹配大于等于N次

8.{M,N}匹配至少M次,最多N次

  1. | 分之(or)
  1. () 匹配的时候分组,让括号中的正则条件变成一个整体
'''匹配一个字符串,abc整体重复三次'''

    re_str = r'(abc){3}'
    print(re.fullmatch(re_str,'abcabcabc'))

3.正则表达式

正则: . \ [] ^ $ | + -? () 这些字符有特殊意义,如果想要单纯的表达这些字符,
需要下前面加‘\’’

注意:1. -, [] , ^, \在中括号中可能是特殊的符号,需要加‘\’
2. . {} * + ? $ | 在中括号中可以不用加,来表示字符

4.re模块方法

方法名 功能
compile 将正则表达式字符串转换成表达式对象
fullmatch(正则表达式,字符串) 完全匹配,从字符串开头匹配到结尾
match(正则表达式,字符串) 不完全匹配,从字符串开头开始匹配,匹配到正则表达式对应的范围位置
search(正则表达式,字符串) 在指定的字符串中查找某种字符串
split(正则表达式,字符串) 按正则表达式匹配到字符串中进行切割
sub(正则表达式,新字符串,原字符串) 在原字符串中查找符合正则的子串,替换成新的字符串


if __name__ == '__main__':
    # 1.compile 将正则表达式字符串转换成表达式对象
    #转换成正则表达式对象后,可以通过对象调用相关方法
    re_obct= re.compile(r'\w{6,12}')
    print(re_obct.fullmatch('sdfdsg'))

    print(re.fullmatch(r'\w{6,12}','sdfdsg'))


    # 2.fullmatch(正则表达式,字符串) 完全匹配,从字符串开头匹配到结尾
    # 返回值是匹配对象,如果匹配失败返回None
    match = re.fullmatch('\w{3}','shd')
    print(match)
    # a.获取匹配的结果
    print(match.group()) #shd
#     b.获取匹配到的范围
    print(match.span()) #(0, 3)

#     c.获取匹配的开始下标和结束下标
    print(match.start(),match.end())
#     d.获取被匹配的字符串(原字符串)
    print(match.string)
#   应用:判断一个字符串是否是某种字符串

#    3.match(正则表达式,字符串)不完全匹配,从字符串开头开始匹配,匹配到正则表达式对应的范围位置
#       返回值是匹配对象,如果匹配失败返回None
    match = re.match('\w{3}','h3d')
    print(match)
    print(match.group())
    print(match.string)
#     应用:判断一个字符串是否以某种字符串开头

#   4. search(正则表达式,字符串)在指定的字符串中查找某种字符串(以正则表达式来描述)
#     若果有对个满足条件,只匹配第一个,如果找不到符合要求的返回None
    print(re.search(r'\d{2,}[a-z]','sha23n--877m0899'))

    # 应用:判断一个字符串中是否包含某种字符串

    # 5.findall(正则表达式,字符串) 去获取指定字符串中满足正则条件的所有的子串
    # 返回值是列表,列表符合要求的字符串,如果没有满足要求的子串就返回[]
    result  = re.findall(r'\D\d+\D','a123buye236oks')
    print(result)     #['a123b', 'e236o']

#     注意:在通过正则表达式获取子串的时候,如果通过在正则表达式中添加括号,来约束获取的内容(只捕获括号中匹配到的内容),匹配的时候还是按正则表达式去查找
    result = re.findall(r'[a-zA-Z](\d+)','12a123buy=263ok98s')
    print(result)  #['123', '98']

    # 应用:字符串提取

    # 6.finditer(正则表达式,字符串)用大和findall一样,只是返回类型不一样
    # 返回一个迭代器 迭代器中的内容是匹配对象
    # 注意:()捕获部分无效
    result = re.finditer(r'[a-zA-Z](\d+)','12a123buy=263ok98s')
    for match in result:
        print(match)

    # print('asfds25dfafdgrh'.split('af'))
    # 7.split(正则表达式,字符串)按正则表达式匹配到字符串中进行切割
    # 返回值是列表,列表元素就是切割后被分段的字符串
    result = re.split(r'\d+','a[hsj25]dfas*a7jid8e-eea')
    print(result) #['a[hsj', ']dfas*a', 'jid', 'e-eea']

    # 8.sub(正则表达式,新字符串,原字符串)  在原字符串中查找符合正则的子串,替换成新的字符串

    """将制定字符串中所有'sb'替换成"*" """
    str1 = '你好sb,你全家都是sb'
    result = re.sub(r'sb','*',str1)
    print(str1,result)
    re_str = r'[a-zA-Z_]\w*'
    print(re.fullmatch(re_str,'5ew'))

你可能感兴趣的:(day15-正则表达式)