正则表达式 re模块

it2024-12-14  13

正则表达式:    (是一种独立的语法,与python语言没有关系)     定义:   一种匹配字符串的规则     正则表达式的应用:         可以定制一个规则:             1.确定/判断某个字符串是否符合规则             2.在一大段字符串中找到符合规则的内容         程序领域:             1.登陆注册网页的表单 验证 web开发             2.爬虫,把网页的源码下载下来,做数据分析             3.自动化开发, 日志分析        帮助学习的测试工具 http://tool.chinaz.com/regex/ 站长工具       元字符          \d ==        [0-9]                匹配的是一个数字         \w ==        [0-9a-zA-Z_]   匹配的是字母数字下划线         \s  ==        [\n \t 空格]      匹配回车 空格 制表符"Tab"           \D                                    匹配非数字         \W                                   匹配回车 空格 制表符         \S                                     匹配非空白                  [\d\D], [\s\S], [\w\W]          匹配所有类型字符串                  ^                                      判断是否是字符串开头,后面跟上要识别的内容         $                                      判断是否是结尾,前面跟上内容         a|b                                    匹配 | 两端的字符a 或者字符b           .                                      匹配除了换行符以外的任意字符  (ps: 在爬虫中用的比较多)         ()                                      分组,可以约束一组字符串         字符组 [ ]             在一个字符的位置上能出现的内容             例: [1cd] 是个范围, 代表这个位置的字符可以是1,c,d 中的任意一个             [0-9][A-Z][a-z]    匹配三个字符             [2-7abc]              匹配一个字符, 可以是2-7中的任意数字或者a,b,c中一个             [0-9A-Za-z]        匹配一个字符         ps: 匹配过程:从头开始匹配一个字符串,匹配到多少个,就返回多少条结果          量词:         ?                      匹配前一个字符0次或1次, 可有可无         +                     匹配前一个字符多次或一次         *                      匹配前一个字符0次或多次,  ?与+拼在一起        {n}                     匹配前一个字符重复n次        {n, }                   匹配前一个字符n+次, n次或更多次        {n,m}                 匹配前一个字符重复n至m次             贪婪匹配:(正则表达式的默认匹配规则, 用的回溯算法) 在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配      仅带有*,+等都是贪婪匹配,也就是尽可能匹配,量词的后面加  ? 号使其变成惰性匹配     几种常用的非贪婪匹配:(惰性匹配)         *? 重复任意次,但尽可能少重复         +? 重复1次或更多次,但尽可能少重复         ?? 重复0次或1次,但尽可能少重复         {n,m}? 重复n到m次,但尽可能少重复         {n,}? 重复n次以上,但尽可能少重复         训练:         <.*>         <.*?>         .^$                 *+?{}              [ ]          分组()?与   或 | [^]   re模块     介绍:正则表达式内置在python中,需要用re模块调用出来     pattern......匹配的正则表达式     string.......要匹配的字符串。      flags......标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志      RegexObject 正则表达式对象     常用匹配方法:         1. re.findall(pattern,string,flags=0)  *****             把匹配到的字符以列表的形式返回         2. re.search(pattern,string,flags=0)    *****             在string中寻找模式,仅返回一个值         3. re.match(pattern,string,flags=0)    **             在string的开始处匹配模式                          4. re.sub(pattern, repl, string, count=0, flags=0)    ***             匹配字符并替换并可以控制替换次数         5. re.subn(pattern, repl, string, count=0, flags=0) ***             匹配字符并替换,可以控制替换次数,打印时会返回替换次数         6. re.split(pattern,string,maxsplit=0,flags=0)    ***             匹配到的字符被当作列表的切割符,返回一个列表                  7. re.compile(pattern)    *****  (可以提高时间效率)             根据包含正则表达式的字符串 创建一个RegexObject,可以通过RegexObject进行re方法操作         8. re.finditer(pattern)  *****  (可以提高空间效率)             返回一个迭代器  (用for循环迭代)                  常用方法:         group()  获取一个或者多个分组匹配的字符串         groups() 获取全部分组的匹配的结果 放在一个元组里,可以只打印索引的结果                  转义符                 应用场景:假如匹配的文本中有"\",在正则表达式中就需要有"\\\\"         在python中有更简单的方法,在pattern或str前面加上 r 就代表转义          其他匹配模式:         re.I             忽略大小写         re.M             多行模式         re.S             点 任意模式     分组() 的应用:          在re.findall  中会优先显示分组中的内容, 想要取消分组内容优先,需要声明(?:pattern)         在re.split  中会保留切割符(被切掉的内容)         在re.search  如果有多个分组的pattern时,通过group(n)可以拿到索引对应的匹配到的内容 ret=re.findall(r"\d+(?:\.\d+)|(\d+)","1-2*(60+(-40.35/5)-(-4*3))")  #显示所有整数 print(ret) #['1', '2', '60', '', '5', '4', '3']      正表达式进阶:          分组命名:             (?P<name>pattern) 表示给分组起名字             (?P=name) 表示使用这个分组,匹配到的内容ing该和分组中的内容完全相同 , 通常跟在(?P<name>pattern)的后面使用   标签匹配: ret = re.search("<(?P<name>\w+)>\w+</(?P=name)>","<h1>hello</h1>") print(ret.group('name')) #结果 :h1 print(ret.group()) #结果 :<h1>hello</h1> ret = re.search(r'<(\w+)>(\w+)</(\w+)>',r'<a>wahaha</b>') print(ret.group()) #<a>wahaha</b> print(ret.group(1)) #a print(ret.group(2)) #wahaha print(ret.group(3)) #b ret = re.search(r'<(?P<tag>\w+)>(?P<c>\w+)</(\w+)>',r'<a>wahaha</b>') print(ret.group()) #<a>wahaha</b> print(ret.group('tag')) #a print(ret.group('c')) #wahaha

  

        练习: import re st= re.findall('\d+',"adfhauo14145") print(st) st1 = re.search('\d+',"adfhauo14145") if st1:print(st1.group()) st2 = re.match("\d+","1414adfhauo14145") if st2:print(st2.group()) its = re.subn('\d','w','afajfj134jh41432') print(its) its1 = re.finditer('\d+','agfg14414ggh4gh1g4h1g4h1g4h1g4hg') for r in its1: print(r.group()) its3 = re.compile('\d+') f = its3.finditer("fhagf245jh21443") for r in f:print(r.group()) f1 = re.split("(\d)","ahfv3142bhbh25hb5h2v5") print(f1)

  

                                              

转载于:https://www.cnblogs.com/sun-ming-ji/p/9438025.html

相关资源:Python3的re模块(正则表达式)
最新回复(0)