• python 初学 正则表达式入门


    正则表达式
    主要三个方法
    re.findall("pattern",str)
    re.match("pattern",str)
    re.search("pattern",str)

    pattern为正则表达式,str是需要匹配的字符串

    最简单正则表达式的运用
    import re
    a='12654511554611615161611'
    r=re.findall('6',a) #判断字符串中是否有6
    if len(r)>0:
    print("字符串包含6")
    else:
    print(None)
    print(r)
    #运行结果:
    字符串包含6
    ['6', '6', '6', '6', '6']
    findall 找到全部的6 并且返回的是一个列表
    ps:
    正则表达式的灵魂是规则 要写有意义的
    以上的虽然也可以称为正则表达式 但是却是毫无意义, 你说呢?


    元字符和普通字符
    #试试提取除字符串中的数字和字母
    import re
    a="as65f65as6fs65f6s66sf6s6f"
    r=re.findall("d",a) #/d表示匹配一个数字字符。等价于 [0-9]。 大写D表示 没有数字 即非数字
    print(r)
    r=re.findall("D",a)
    print(r)
    #字符串是普通字符 #d 这样的叫元字符d
    运行结果:
    ['6', '5', '6', '5', '6', '6', '5', '6', '6', '6', '6', '6']
    ['a', 's', 'f', 'a', 's', 'f', 's', 'f', 's', 's', 'f', 's', 'f']


    字符集
    import re
    s="abc,acc,adc,aec,afc,ahc"
    r=re.findall("a[cf]c",s) #取出 中间是c 或者 f
    d=re.findall("a[^cf]c",s)
    b=re.findall("a[c-f]c",s)
    print(r)
    print(d)
    print(b)
    结果为:
    ['acc', 'afc']
    ['abc', 'adc', 'aec', 'ahc']
    ['acc', 'adc', 'aec', 'afc']
    #出现在[]内的是或的关系 内容+^表示反意 "-" 表示到


    概况字符集 d,D >>>[-9] w 表示 匹配字符和数字 下划线 >>>不能匹配特殊符号W 表示反意
    #s 表示空白字符 S 非空白字符
    # .匹配除换行符 之外其他所有字符

    字符集和概括字符集 都是只能匹赔单一的字符 所以引出了后面成组的概念

    #数量词
    #成组 用多个[]
    import re
    a= "python 1111jave678php"
    r = re.findall('[a-z]{3,6}',a) #中括号后+花括号 成组表示
    print(r)
    结果为:
    ['python', 'jave', 'php']
    #意思是什么 a-z的字母这样的字母最少我取3个 最多我取6个 贪婪模式下 反之呢
    import re
    a= "python 1111jave678php"
    r = re.findall('[a-z]{3,6}?',a) #中括号后+花括号 成组表示
    print(r)

    结果为:
    ['pyt', 'hon', 'jav', 'php']
    #意思是什么 a-z的字母这样的字母最少我取3个就够了 满足3 我就够了

    #贪婪和非贪婪 当数量词在某范围内将尽可能多的满足条件的内容输出 非贪婪 满足条件就输出


    # *号键 匹配*前面的字符0次或者无限多次
    #+号键 匹配+前面的字符1次或者无限多次
    #?号键 匹配0次或者一次 会去多余n
    import re
    a = "pytho0python1pythonn2"
    r = re.findall('python?',a) #?前面是0个n
    print(r)
    运行结果为:
    ['pytho', 'python', 'python']
    #可以看出什么 ?前面是n 我匹配的python 可以没有n 可以有一个n 如果有多个n那么我会去掉他
    import re
    a = "pytho0python1pythonn2"
    r = re.findall('python*',a)
    print(r)
    运行结果为:
    ['pytho', 'python', 'pythonn']
    *前面是n 匹配*前面的字符0次或者无限多次
    import re
    a = "pytho0python1pythonn2"
    r = re.findall('python+',a)
    print(r)
    运行结果为:
    ['python', 'pythonn']
    +前面是n 匹配依此 或者无限多次的这个字符

    边界匹配
    import re
    qq = "100001"
    r = re.findall("d{4,8}",qq) #4-8是合法的 上面是寻找
    print(r)

    qq="1000000000000000000001"
    r = re.findall("^d{4,8}$",qq) #运用边界符匹配整个字符串是否满足 条件 字符串前"^"
    print(r) #后面$
    运行结果为:
    ['100001']
    []

    #前者 匹配数字 4-8个都可以 我很贪婪我都匹配下来
    #后者 匹配非数字4-8个 我很贪婪 但是很抱歉我没有找到数字


    import re
    a="pythonpythonpythonpythonpython"
    r=re.findall("(python){3}",a)
    print(a)

    结果为:
    pythonpythonpythonpythonpython

    #我匹配的是python 这些字母开头的 匹配三个就满足条件 是且的关系 好几个三个 返回了一个字符串


    # () 表示组 内容是且的关系 正则表达式中可以有多个组 组后是数量词
    # [] 内容是或的关系

    匹配模式参数

    import re
    language="PythonC# JavePHP"
    #4-8
    r = re.findall("c#.{1}",language,re.I|re.S) #用小写c匹配C# 可以用re.I 忽略大小写 多个模式用‘|’
    print(r) # re.S 匹配所有字符
    #运行结果:
    ['C# ']
    总结出什么?re.findall("pattern",str,模式参数)

    re.sub 正则替换
    import re
    def civent(value):
    return 'go'
    language="PythonC#JavePHPC#JaveC#JaveC#Jave"
    r = re.sub("C#",civent,language,1) #count 表示替换的最大次数 0 全部替换
    # 函数可以做第二个参数也可以是要替代的字符串
    print(r)
    运行结果:
    PythongoJavePHPC#JaveC#JaveC#Jave
    #将一个C#改为了go


    #把函数作为参数传递
    import re
    s = "A8C3721D86"
    def covent(value): #value 是个对象
    mathed=int(value.group()) #成组出现
    if mathed >=6:
    return '9'
    else:
    return '0'

    r=re.sub("d",covent,s)
    print(r)
    运行结果:
    A9C0900D99
    将大于等于6的数字返回9,否则返回0

    #search与match 函数
    import re
    s = "83C72D1D8E67"

    r=re.match("d",s) #从开始匹配
    #match 尝试从字符串的首字母开始匹配,如果matcch没有找到相应的匹配结果 将返回一个None
    print(r)
    r1=re.search("d",s)
    #search是搜素整个字符串,直到找到第一个满足正则表达式的结果,然后将匹配的结果返回
    print(r1)
    #一旦匹配成功立刻停止搜素


    #group的概念
    import re
    s="life is short, i use python"
    r=re.search("life(.*)python",s) #取 life—pytho中的内容
    print(r.group(1))

  • 相关阅读:
    自签证书的创建与导入
    Linux常用命令
    JS数据类型
    call和apply
    css浮动Float
    vue 列表进入详情后,返回保持原位置
    vue-cli2升级为vue-cli3
    html2canvas使用中的小问题
    jquery点击空白处关闭弹窗
    template.js中template模板中onclick传参
  • 原文地址:https://www.cnblogs.com/pythonyeyu/p/10003373.html
Copyright © 2020-2023  润新知