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

 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 个或多个字符(贪婪匹配)    <*>匹配<title>chinaunix</title>
 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 (?<!...)    Matches if not preceded by ... (must be fixed length).    '(?<!hello)test' 在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        此时只需使用()进行分组就行了
相关文章
相关标签/搜索