美文网首页程序员
0113编程-re-Python的正则表达式

0113编程-re-Python的正则表达式

作者: zhyuzh3d | 来源:发表于2019-01-13 14:26 被阅读23次

    点击这里进入人工智能嘚吧嘚目录,观看全部文章


    匹配

    用来验证字符串的格式。
    匹配不通过返回None,通过的话可以用ma.group(0)获得匹配结果。

    import re
    ma = re.compile(r'^[a-z]+$').match('5ha-v44v')  #match对象,不匹配返回None
    ma == None #True
    

    搜索

    match总是从开头匹配,search没有限制。

    ma=re.compile(r'[a-z]+').match('5ha-v44v')    # No match
    se=re.compile(r'^[a-z]+$').search('5ha-v44v')  #match
    se2=re.compile(r'[a-z]+').search('5ha-v44v')  #match
    
    print(ma,se,se2.group(0)) #输出None None ha
    

    提取

    findall搜索返回字符串数组,所以也可以用来提取。

    ma=re.compile(r'[a-z]+').findall('88')    # []
    ma2=re.compile(r'[a-z]+').findall('5ha-v44d') #['ha', 'v', 'd']
    print(ma,ma2) #输出[] ['ha', 'v', 'd']
    

    finditer可以用来返回结果字符串的位置。

    ma=re.compile(r'[a-z]+').finditer('5ha-v44d') #['ha', 'v', 'd']
    for m in ma:
        print(m.start(),m.end(),m.group(0))
    

    复杂提取

    利用[..]()提取符合匹配的字符串。
    利用(.+?)提取被特定字符包裹的字符串。

    a=re.compile(r'[0-9\.]+').findall('1.3万/月') #['1.3']
    b=re.compile(r'3(.+?)月').findall('1.3万/月') #['万/']
    print(a,b) #['1.3'] ['万/']
    

    (?P<name>)结合groupdict()可以获得单个内容。

    m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds")
    m.groupdict() #{'first_name': 'Malcolm', 'last_name': 'Reynolds'}
    
    

    (?<=...)表示只取在...之后位置范围内的。

    m = re.search('(?<=-)\w+', 'spam-egg')
    m.group(0) #'egg'
    

    flag参数

    re.I 忽略大小写
    re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
    re.M 多行模式
    re.S 即为' . '并且包括换行符在内的任意字符(' . '不包括换行符)
    re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
    re.X 为了增加可读性,忽略空格和' # '后面的注释


    点击这里进入人工智能DBD嘚吧嘚目录,观看全部文章


    每个人的智能新时代

    如果您发现文章错误,请不吝留言指正;
    如果您觉得有用,请点喜欢;
    如果您觉得很有用,欢迎转载~


    END

    相关文章

      网友评论

        本文标题:0113编程-re-Python的正则表达式

        本文链接:https://www.haomeiwen.com/subject/czjhdqtx.html