• Python之正则表达式


    Re一些规则

    规则1
    规则2
    正则表达式在很多地方都是非常有用的,比如在写网络爬虫的时候,提取元素或者提取网址的时候有很大的作用。而正则表达式常用于字符串操作

    字符匹配

    1.元字符的完整列表:. ^ $ * + ? { [ ] | ( )
    匹配“a,b,c中的一个字符”:[abc] 或者 [a-c]
    2.一些常用的特殊符号

    d 匹配任何十进制数,相当于[0-9]
    D 匹配任何非数字字符,相当于[^0-9]
    s 匹配任何非空白字符,相当于[	
    
    fv....]
    S 匹配任何非空白字符,相当于[^ 	
    
    fv...]
    w 匹配任何字母数字字符,相当于[a-zA-Z0-9]
    W 匹配任何非字母数字字符,相当于[^a-zA-Z0-9]
    

    3.重复

    • “*”前一个字符可以被匹配零次或更多次,而不是只有一次
    • {m,n}限定符,表示至少有m个重复、至多有n个重复.
    eg.
    re.match(r'a/{2,4}b',a//b)=true
    re.match(r'a/{2,4}b',a/b)=false
    

    python使用正则表达式

    RegexObject实例:

    方法/属性 作用
    match() 决定re是否在字符串刚开始的位置匹配
    search() 扫描字符串,找到这个re匹配的位置
    findall() 找到re匹配的子串,并把它们作为一个列表返回
    finditer() 找到re匹配的所有子串,并把它们作为一个迭代器返回

    MatchObject实例:

    方法/属性 作用
    group() 返回被re匹配的字符串
    start() 返回匹配开始的位置(索引)
    end() 返回匹配结束的位置(索引)
    span() 返回一个元组包含匹配(开始,结束)的位置
    eg.
    p = re.compile('d+')
    p.findall('1 hello,2 byebye,3 yes,4 no')
    >>>['1','2','3','4']
    

    一些提醒:
    [^abc]表达的意思是匹配除了abc的任何一个字符;但是如果是^abc则表达的意思是匹配以'abc'开始的字符串
    match()函数只检查re是否在字符串开始处匹配,而research()则是扫描整个字符串。如果匹配不是从字符串的位置0处开始的,match()将不会报告它。
    From (S+@S+)表达的意思是从From开始匹配,但是提取的时候只提取括号内的内容。

    贪婪匹配

    默认的为贪婪匹配,意思是:

    #我想匹配From:,所以可以用^F.+:进行匹配
    p = re.match(r'^F.+:','From: using : it is')
    print(p)
    >>>From: using : 
    

    从上述例子可以看出,一般匹配的时候都采用了贪婪匹配,即满足匹配规则的最长字符串;为了避免这个,需要将匹配规则写成'r'^F.+:?',其中?就是不进行贪婪匹配。

    修改字符串

    方法/属性 作用
    split() 将字符串在re匹配的地方分片并生成一个列表
    sub() 找到re匹配的所有子串,并将其用一个不同的字符串替换
    subn() 与sun()相同,但返回新的字符串和替换次数

    将字符串分片split()

    p = re.compile(r'W+')
    p.split('This is a test')
    >>> ['This','is','a','test','']
    

    更高级一点的分片

    往往我们需要的可能只是一个字符串里的字母或者数字,即相关数据提取;所以我们对于一些符号需要进行排除p.split(r'(s\,.#\)ab*'), 这样的格式就可以将一些符号进行排除,只正确分片出我们所需呀的关键信息。

    搜索和替换sub()

    sub(replacement,string[,count = 0])返回的字符串是在字符串中用re最左边不重复的匹配来替换,如果模式没有被发现,字符将被没有改变的返回。可选参数count是模式匹配后替换的最大次数;count必须是非负整数。缺省值是0表示替换所有的匹配。

    eg.
    p = re.compile('(blue|white|red)'))
    p.sub('colour','blue socks and red shoes')
    >>>colour socks and colour shoes.
    p.sub('colour','blue socks and red shoes',count = 1)
    >>>colour socks and red shoes
    

    邮箱验证

    虽然没有统一的邮箱账号格式,但是所有邮箱都符合“名称@域名”的规律。对于名称和域名的字符限制,我们可以根据项目的情况定义一个,比如只允许有英文、数字、下划线等组成。
    举例:zhangsan-001@gmail.com
    分析邮件名称部分

    • 26个大小写英文字母表示为a-zA-Z
    • 数字表示为0-9
    • 下划线表示为_
    • 中划线表示为-
    • 由于名称是由若干个字母、数字、下划线和中划线组成,所以需要用到+表示多次出现
      所以根据以上条件得出邮件名称表达式:[a-zA-Z0-9_-]+
      由于邮箱的基本格式为“名称@域名”,需要使用“^”匹配邮箱的开始部分,用“$”匹配邮箱结束部分以保证邮箱前后不能有其他字符,所以最终邮箱的正则表达式为:

    ^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$

    作者:YunLambert

    -------------------------------------------

    个性签名:一名会音乐、爱健身的不合格程序员

    可以Follow博主的Github哦(っ•̀ω•́)っ✎⁾⁾

  • 相关阅读:
    Vue 项目目录结构分析
    Vue 项目环境搭建
    Vue 组件
    Vue 指令
    Vue 实例成员
    Django 静态文件
    MySQL 索引详解
    Django 请求生命周期
    18. 4Sum (JAVA)
    16. 3Sum Closest (JAVA)
  • 原文地址:https://www.cnblogs.com/yunlambert/p/8321897.html
Copyright © 2020-2023  润新知