python爬虫之正则表达式

来源:互联网 发布:java集成测试框架 编辑:程序博客网 时间:2024/05/19 03:24

正则表达式


                正则表达式就是描述字符串排列的一套规则,也被称为模式表达式,其主要用于字符串的匹配。



正则表达式基础

           1.原子

                   原子是正则表达式中最基本的组成单位,每个正则表达式中至少要包含一个原子。

                         常见类别:          

                                       普通字符作为原子

                                       非打印字符作为原子

                                       通用字符作为原子

                                       原子表

                    A.普通字符作为原子:普通字符,比如数字,大小写字母,下划线等

import repattern = "yue"string = "I love yue"result = re.search(pattern,string)    #匹配print(result)
                   B.非打印字符作为原子:指的是一些在字符串中用于格式控制的符号,比如换行符(\n),制表符(\t)等

import repattern = "\n"string = '''I love yueI love you to '''result = re.search(pattern,string)print(result)

                   C.通用字符作为原子:即一个原子可以匹配一类字符  

                                             \w:  匹配任意一个字母,数字或下划线

                                             \W: 匹配除字母,数字和下划线以外的任意一个字符

                                             \d:   匹配任意一个十进制数

                                             \D:     匹配除十进制以外的任意一个字符

                                             \s:   匹配任意一个空白字符

                                             \S:     匹配除空白字符以外的任意一个其他字符

import repattern1 = "\w\dpython\w"string1 = "asdhajsfjafjkpython_456"result1 = re.search(pattern1,string1)print(result1)
                        D.原子表: 可以定义一组地位平等的原子,然后匹配的时候会取该原子表中任意一个原子进行匹配
                                             如[abc]py,则对应apy 或者bpy 或者cpy

                                                 [^abc]表示除了括号里面的原子均可以匹配到。

import rea="\w\dpython[abc]\w"b="\w\dpython[^abc]\w"string = "ahjkfhja546215pythonx_56"result = re.search(a,string)print(result)result = re.search(b,string)print(result)

             2.元字符

                           正则表达式中具有 一些特殊含义的字符

                        (1)任意匹配元字符:   .

                                                   "."匹配一个换行符以外的任意字符

import repattern = ".python..."string = "hasjkhjafhjpythonjkalk"result = re.search(pattern,string)print(result)
                         (2)边界限制元字符         "^"               "$"

                                                   " ^ "匹配字符串的开始      " $ "匹配字符串的结束 

                                                 "^has"既匹配以has开头的字符串       "lk$"既匹配以lk结尾的字符串

import rea = "^has"b = "^h"c = "^a"d = "lk$"string = "hasjkhjafhjpythonjkalk"x = re.search(a,string)y = re.search(b,string)z = re.search(c,string)m = re.search(d,string)print(x)print(y)print(z)print(m)
                          (3)限定符       " * "    " ? "      " + "        "{n}"  "{n,}"  "{n,m}"

                                                     " * "匹配0次,1次或多次前面的原子       " ? "匹配0次或1次前面的原子

                                                     " + "匹配一次或多次前面的原子          {n}匹配前面的原子出现n次

                                                     " {n,} "匹配的前面的原子至少出现n次    {n,m}匹配的原子至少出现n次,最多m次

      

import rea = "py.*n"b = "cd{2}"c = "cs{3}"d = "cd{2,}"string = "hasjkhjacdddddddfhjpythonjkalk"x = re.search(a,string)y = re.search(b,string)z = re.search(c,string)m = re.search(d,string)print(x)print(y)print(z)print(m)
                           (4)模式选择符    " | "

                                            " | "可以设置多个模式,匹配时,可以选择任意一个模式

import rea = "python|dddd"string = "hasjkhjacdddddddfhjpythonjkalk"x = re.search(a,string)print(x)
                             (5)模式单元符     " () "

                                           "()"将一些原子组合成一个大原子用

import rea = "(dd){1,}"string = "hasjkhjacdddddddfhjpythonjkalk"x = re.search(a,string)print(x)

           3.修正模式

                              I    匹配时忽略大小写            M     多行匹配              L    做本地化识别匹配

                              U   根据Unicode字符及解析字符         S   让.匹配包括换行符,即用了该模式修正后,“."匹配可以匹配任意字符

import rea = "python"string = "hgajsdjahPython_adhj"result = re.search(a,string)result1 = re.search(a,string,re.I)print(result)print(result1)

           4.贪婪模式与懒惰模式

                         

import rea="p.*y"#贪婪模式b="p.*?y"#懒惰模式string = "asphjdpython_adhy"x = re.search(a,string)y = re.search(b,string)print(x)print(y)

常见函数

             1.re.match(pattern,string,flag(标志位,可以是模式修正符))从起始位置匹配

             2.re.search(pattern,string,flag)全文检索并匹配

             3.全局皮匹配函数:在源字符串中所有的匹配结果全部匹配出来

                                                 先使用re.compile()对正则表达式预编译

                                                 再使用findall(string)找出匹配的结果

             4.re.sub(pattern(被替换掉的内容),rep(替换其他字符串的内容),string,max(代表最多替换的次数,默认全部替换))可以替换源字符串中某些字符

import rea = ".python.."b = "PYTHON"string1 = "apythonfhajpythonahkjfaskfjpythonfhfj"string2 =  "pythonfhajpythonahkjfaskfjpythonfhfj"print(re.match(a,string1))print(re.match(a,string2))print("-----------")print(re.search(a,string1))print(re.search(a,string2))print("-----------")print(re.compile(a).findall(string1))print(re.compile(a).findall(string2))print("-----------")print(re.sub("python",b,string1))print(re.sub("python",b,string2))