正则表达式进阶

进阶正则表达式
JavaScript正则进阶之路——活学妙用奇淫正则表达式
Python正则表达式库:
Python菜鸟教程

对几个较难的说明一下:
①[…]表示字符集,字符可以逐个给出,也可以给范围(如 a-z, 1-9),但是[^abc]表示取反,且所有的特殊字符在字符集中都失去其原有的特殊含义
② \w的范围在设定了ascii 下是 [a-zA-Z0-9] ,但是在python re模块中,\w就是代表非标点符号
③.? /+? ?? 会使 + ? {m,n}变成非贪婪,即匹配短的优先
④ (…)分组,表达式作为一个整体,被进行编号,但是 (?:…) 表示不分组,即不能用 \1 进行引用,只用来作为整体使用
⑤ (?!..) 后面不为…,没有 =
⑥(?<=…) 和 (? ⑦如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以使用 re.compile() 预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配:
⑧年/月/日更严格的一种匹配方式是: re.compile(r'([0-9]{2}|[0-9]{4})\/(0[1-9]|1[0-2]|[1-9])\/(1[0-9]|2[0-9]|3[01])')
正则表达式进阶_第1张图片

核心函数模块
正则表达式进阶_第2张图片

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

    # 2.fullmatch(正则表达式,字符串)完全匹配,从字符串开头匹配到结尾
    # 返回值是匹配对象,如果匹配失败返回None
    match = re.fullmatch('\w{3}', 'h3s')
    print(match)
    # a.获取匹配到的结果
    print(match.group())
    # b.获取匹配到的范围
    print(match.span())
    # c.获取匹配到的开始的下标和结束下标
    print(match.start(), match.end())
    # d.获取匹配到的字符串(原字符串)
    print(match.string)
    # 应用:判断一个字符串是否是某种字符串(判断账号、密码是否符合要求等)

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


    # 4.search(正则表达式,字符串)在指定的字符串找到某种字符串(以正则表达式来描述)
    print(re.search(r'\d{2,}[a-z]', 'fhuefh45t454uhuh435--dff4u'))
    # 应用:判断一个字符串中是否包含某种字符串

    # 5.findall(正则表达式,字符串)去获取指定字符串中满足正则条件的所有字符串
    # 返回值是列表,列表中是符合要求的字符串。没有满足要求的字符串就返回[]
    result = re.findall(r'[a-z](\d+)', '123fdgv2324dfg')
    print(result)
    # 注意:在通过正则表达式获取子串的时候,可以通过正则表达式中添加括号,来约束获取的内容(只捕获括号中匹配到的内容)
    #       匹配的时候还是按原正则表达式去查找
    # 应用:字符串提取


    # 6.finditer(正则表达式,字符串)用法和findall一样,只是返回值的类型不一样
    # 返回一个迭代器
    # 注意:()捕获部分无效
    result = re.finditer(r'[a-z](\d+)', '123fdgv2324dfg')
    for math in result:
        print(match)

    # 7.split(正则表达式,字符串)按正则表达式匹配到的字符串进行切割
    # 返回值是列表,列表元素就是切割后被分段的字符串
    result = re.split(r'\d+', 'ef234guyhg65yug3u4g')
    print(result)

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

    """将指定字符串中所有‘sb'替换成'*'"""
    str1 = '你好sb,你全家都是sb'
    result = re.sub(r'sb', '*', str1)
    print(result)

你可能感兴趣的:(自然语言处理,编程基础)