热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

19python正则表达式及相关函数

11,正则表达式2########################################31,元字符4.^$*+?{}[]\|
  1 1,正则表达式
  2 ########################################
  3 1,元字符
  4    . ^ $ * + ? {} [] \ |  ()
  5 
  6 "."    任意字符     
  7 "^"    字符串开始    '^hello'匹配'helloworld'而不匹配'aaaahellobbb'
  8 "$"    字符串结尾    与上同理
  9 "\\"    特殊字符转义或者特殊序列     
 10 []    表示一个字符集,匹配字符集中的一个字符
 11         [0-9]、[a-z]、[A-Z]、[^0]
 12         []中如果出现元字符,则元字符匹配意义失效,只作为普通字符
 13 
 14 "*" 0 个或多个字符(贪婪匹配)    <*>匹配
 15 "+"    1 个或多个字符(贪婪匹配)    与上同理
 16 "?"    0 个或1个字符(贪婪匹配)    即可有可无
 17 {m}     对前一个字符重复m次,a{6}匹配6个a、a{2,4}匹配2到4个a
 18 {m,n}    对于前一个字符重复m到n次,
 19 {m,n}?    对于前一个字符重复m到n次,并取尽可能少    
 20        re.findall("a{2,4}?","aaaaaa")中 只会匹配2个
 21 
 22 
 23 
 24 "|"    或    A|B,或运算
 25 (...)    匹配括号中任意表达式     
 26 (?#...)    注释,可忽略     
 27 (?=...)    Matches if ... matches next, but doesn't consume the string.    '(?=test)'  在hellotest中匹配hello
 28 (?!...)    Matches if ... doesn't match next.    '(?!=test)'  若hello后面不为test,匹配hello
 29 (?<=...)     Matches if preceded by ... (must be fixed length).    '(?<=hello)test'  在hellotest中匹配test
 30 (?if not preceded by ... (must be fixed length).    '(?'  在hellotest中不匹配test
 31 
 32 #############################################
 33     正则表达式特殊序列表如下:
 34 \A    只在字符串开始进行匹配
 35 \Z    只在字符串结尾进行匹配
 36 \b    匹配位于开始或结尾的空字符串
 37 \B    匹配不位于开始或结尾的空字符串
 38 \d    相当于[0-9]
 39 \D    相当于[^0-9]
 40 \s    匹配任意空白字符:[\t\n\r\r\v]
 41 \S    匹配任意非空白字符:[^\t\n\r\r\v]
 42 \w    匹配任意数字和字母:[a-zA-Z0-9]
 43 \W    匹配任意非数字和字母:[^a-zA-Z0-9]
 44 
 45 ########################################################
 46 ##########      正则表达式的一些函数     ###############
 47 ########################################################
 48 python中re模块的用法
 49 
 50 Python 的 re 模块(Regular Expression 正则表达式)
 51 
 52 下面我主要总结了re的常用方法。
 53 1.re的简介
 54     使用python的re模块,python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。
 55 
 56 help(‘modules’)    ---查看python中已经安装好的模块
 57 import re          
 58 print re.__doc__   ##可以查询re模块的功能描述信息,即模块前面的注释
 59     下面会结合几个例子说明。
 60 
 61 ############################################
 62         i=patt.search(line)
 63         if i!=None:
 64             print line
 65         else:
 66             print "xxxx"
 67 
 68 
 69 1.re的主要功能函数
 70     常用的功能函数包括:compile、search、match、split、findall(finditer)、sub(subn)
 71     ##说明以下中括号,表示可有可无(即是可选参数)
 72 compile
 73      re.compile(pattern[, flags])
 74        作用:
 75           把正则表达式语法转化成正则表达式对象
 76      flags定义包括:
 77      re.I:忽略大小写
 78      re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
 79      re.M:多行模式(如果要匹配的字符串是多行的话,即忽略换行符)
 80      re.S: 即’ . ’并且包括换行符在内的任意字符(注意:’ . ’不包括换行符)
 81             即增加了 '.'所能够匹配的范围
 82      re.U: 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
 83      
 84 search  ##从整个字符串中匹配
 85     ##返回的也是个match对象或者空
 86     re.search(pattern, string[, flags])
 87     search (string[, pos[, endpos]])
 88     作用:在字符串中查找匹配正则表达式模式的位置,返回 MatchObject 的实例,如果没有找到匹配的位置,则返回 None。
 89 
 90 match    ##只匹配开头的
 91     ##返回的是一个match对象或者空
 92     re.match(pattern, string[, flags])
 93     match(string[, pos[, endpos]])
 94     作用:
 95     match() 函数只在字符串的开始位置尝试匹配正则表达式,也就是只报告从位置 0 开始的匹配情况,
 96     而 search() 函数是扫描整个字符串来查找匹配。如果想要搜索整个字符串来寻找匹配,应当用 search()。
 97 
 98 split
 99       ##返回字符串列表
100      re.split(pattern, string[, maxsplit=0, flags=0])
101      split(string[, maxsplit=0])
102      作用:可以将字符串匹配正则表达式的部分割开并返回一个列表
103 
104      例:
105         list1=re.split(r"ni","sssniaaanidddniiii")
106         print (list1)
107       结果为:
108         ["sss","aaa","ddd","iiii"]
109       例:
110         list1=re.split(r"(ni)","sssniaaanidddniiii")    ###注意正则表达式使用括号和不使用括号的区别 
111         print (list1)
112      结果为:
113          ["sss","ni","aaa","ni","ddd","ni","iiii"]
114 
115 
116 findall
117       ##返回匹配成功的字符列表或者空
118       re.findall(pattern, string[, flags])
119       findall(string[, pos[, endpos]])
120       作用:在字符串中找到正则表达式所匹配的所有子串,并组成一个列表返回
121       例:查找[]包括的内容(贪婪和非贪婪查找)
122       例:
123      a=re.findall(r"ni","woainidddni")
124      print (a)
125      结果为:["ni","ni"]     ##返回的是将匹配成功的字符串截取出来,返回,组成列表
126 
127 
128 finditer ()
129      ##返回的是一个迭代器(iterator)的对象或者空
130 
131 sub()/subn()
132     sub(正则,要替换成的字符,原始字符串)
133     例:
134      r=re.compile (r"a..b" )
135      a=r.sub("eee","ddaxybccc")
136      print (a)
137      >>ddeeeccc
138       --------
139      print ("#"*20)
140      rr=r"a..b"
141      a=re.sub(rr,"eeeeee","dddaxxbccc")
142      print (a)
143      >>dddeeeeeeccc
144      -----------
145      rr=r"a..b"
146      a=re.sub(rr,"","dddaxxbccc")
147      print (a)
148 
149      
150     说明:replace也是可以进行替换的,但是的参数并不是正则(因为replace参数不识别元字符)
151     
152 
153        
154 #######  例子: ########################
155 例:最基本的用法,通过re.RegexObject对象调用
156        #!/usr/bin/env python
157        import re
158        r1 = re.compile(r'world')       ##把“word”字符串,转化成正则表达式的对象,这样就可以调用正则表达式的其它函数了
159        if r1.match('helloworld'):      ##调用匹配函数
160            print 'match succeeds'
161        else:
162            print 'match fails'         ##因为是从位置0开始match所以,未匹配成功,
163 
164        if r1.search('helloworld'):
165            print 'search succeeds'      ##因为是搜索整个字符串进行匹配,所以会匹配成功
166        else:
167            print 'search fails'
168     说明:
169       以下执行结果为:
170       match fails
171       search fails
172 
173 说明一下:
174      r是raw(原始)的意思。因为在表示字符串中有一些转义符,如表示回车'\n'。如果要表示\表需要写为'\\'。但如果我就是需要表示一个'\'+'n',不用r方式要写为:'\\n'。但使用r方式则为r'\n'这样清晰多了。
175 
176 例:设置flag
177 
178      #r2 = re.compile(r'n$', re.S)
179      #r2 = re.compile('\n$', re.S)
180      r2 = re.compile('World$', re.I)    ##设置忽略大小写
181      if r2.search('helloworld\n'):      ##所以就可以匹配成功
182          print 'search succeeds'
183      else:
184          print 'search fails'
185      
186 例:直接调用
187 
188        if re.search(r'abc','helloaaabcdworldn'):
189            print 'search succeeds'
190        else:
191            print 'search fails'
192 
193    说明:
194       使用python是的正则表达式,
195       1,可以先 生成正则表达式对象
196       1.1,再使用该对象调用相应函数进行正则匹配
197 
198       2,可以直接使用正则表达式类,调用类中的方法,将正则表达式作为第一个参数,被匹配的作为第二个参数,
199 
200 #################################################################
201 4,正则分组
202     使用()
203     例:
204       匹配邮箱
205       email=r"\w{3}@\w+(\.com|\.cn)"
206       re.findall(email,"hyy@sina.com")
207       re.findall(email,"hyy@yahoo.cn")
208 
209      注意:
210        如果正则中使用到分组,则返回的只有分组所匹配成功的数据(虽说匹配的有很多)
211        即优先返回分组所匹配的数据
212 
213      说明:
214        因为有时候,我们虽说匹配很多,但是我们只想要匹配出来字符串的某一段
215        此时只需使用()进行分组就好了

 


推荐阅读
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
author-avatar
xiaomanni521125655
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有