python&正则表达式&高级

版权声明:博客追求原创,如果有借鉴尽量都在文后注明 https://blog.csdn.net/DefaultTest/article/details/80934065

一、常见应用场景

  • 1.1 验证用户输入是否符合规范

  • 1.2 数据清洗、文本查询

二、规范

  • 2.1 匹配单个字符

    \d 匹配数字0-9 (十进制)
    \D 匹配数字以外的字符
    \w 匹配数字、字母、下划线;-> 慎用,还可以匹配中文等Unicode码
    \W 匹配除数字字母下划线中文以外的字符
    \s 匹配空白字符串;包括\t,\r,\n,空格,tab键等
    \S 匹配非空字符串
    . 可以匹配 除换行字符\n外的任意字符
    [] 可以匹配它内部的任意单个字符,它们地位平等;所以不要画蛇添足加“,”或着“space”等; [^] 表示除了中括号内的原子均可匹配。如abc 匹配除了a,b,c之外的其它任意字符,注意:abc都要剔除而不是只剔除a。
  • 2.2 匹配多个字符

    * 匹配前一个字符出现0次、1次、多次
    + 匹配前一个字符出现1次或多次
    匹配前一个字符出现0次或1次
    {m} 匹配前一个字符出现m次
    {m,n} 匹配前一个字符出现m到n次
    {m,} 匹配前一个字符出现 至少m次
  • 2.3 匹配开头和结尾:功能定位符

    ^ 定位匹配开始的位置;注:这个符号放在中括号内部的开头,表示“取反”的意思
    $ 定位匹配结束的位置
  • 2.4 匹配分组

    竖杠 | 匹配左右任意一个表达式。为避免歧义:常常配合小括号使用,如(163|126|qq).com来匹配不同邮箱
    (ab) 将括号中的字符作为一个整体,来进行不同的操作;默认group()取出匹配到的所有内容;group(1) - 匹配到的是第一个,索引从第一个开始;扩展:<h1>.*<\h1> 会用到 () 和 \1
    \num 引用分组num匹配到的字符串
    (?P<name>) 分组取别名,name为别名;注:需要小括号
    (?P=name) 引用别名为name分组取到的字符串
  • 2.5 re模块的函数

    re.match(匹配模式,源字符串,flag -->可选参数,对应标志位可以放模式修正符等信息) 默认从源字符串起始位置开始匹配,如果有多个结果满足只返回第一个。可以通过group()筛选后返回;有些情况下:写参数Pattern时可以不写^,但是一定要写$,但是在别的语言中match不一定是这个用法
    re.search() 从全文中进行检索并匹配,如果有多个结果满足,只返回第一个,可以通过group()筛选后返回
    re.sub(pattern, 要替换的结果,目标字符串) 将匹配到的字符串进行替换,返回|整个|(新)字符串,且将匹配到的内容全部替换为要替换的内容,且默认以字符串返回。
    re.sub(pattern, 函数名,目标字符串,[max-->最多替换的次数,如果不写则默认全部替换]) 将匹配到的字符串结果作为参数传递到函数中,并进行操作后,return str ,必须返回字符串。最后,进行替换后打印出来。
    re.findall(匹配模式,源字符串,[flag]) re.findall()自动返回所有正确匹配的结果,不需要group(),且以列表的形式返回。部分地方会写成:re.comlile(pattern).findall(string)
    re.split() 根据匹配进行切割字符串,并返回一个列表;
    匹配成功后的(过滤后)展示方式 匹配结果.group(),将匹配到的结果以字符串的形式展示出来;匹配结果.span(),以元组的形式展示匹配成功的起止索引,如(0,8)
  • 2.6 贪婪匹配与非贪婪匹配

    • 1.在条件成立的条件下,python默认贪婪,在匹配成立的条件下,匹配的越多越好

    • 2.?--->非贪婪,成立,匹配的越少越好

    • 3.[ . , * , ? , {n,m} ]后面都可以接非贪婪

    • 4.通配字 . 那它在从左到右的顺序求值时,会尽量“抓取”满足匹配最长字符串

  • 2.7 r -->raw:原始字符串

    • 1.如果在正则表达式中使用了某些普通字符,比如.*?等需要转义,如提取图片网址"XXX.jpg"对 . 要进行转义

    • 2.python解释器中默认要对有特殊含义的字符串进行转义,所以原始字符串中可能就要出现两个反斜杠;而匹配模式中,要想成功匹配就需要对原始字符串中的两个反斜杠分别都进行转义才能表达原来两个\的意思,所以,就需要两倍的\,变成\\

    • 3.引入r解决:转义再转义,加r之后只需要和原始字符串保持一致即可不需要再多加;不需要转义,加不加r没区别

三、demo

  • 1.匹配邮箱

  • 2.匹配电话

  • 3.提取网页图片http

  • 拉勾网职位信息处理...

猜你喜欢

转载自blog.csdn.net/DefaultTest/article/details/80934065