首页 > 代码库 > Python Re模块

Python Re模块

0x01 常用元字符和特殊符号

 1 .    匹配除换行符以外的任意字符,除开换行 2 #f.o    可以匹配fao, foo等 3  4 ^    匹配字符串的开始 5 #^From   匹配任何以From开始的字符串 6  7 $    匹配字符串的结束 8 #/bin/tcsh$    匹配任何以/bin/tcsh结束的字符串 9 #^/bin/tcsh$   匹配仅由/bin/tcsh组成的字符串10 11 []    用来匹配一个指定的字符类型12 #b[aeiu]t   匹配bat, bet, bit, but13 14 [^...]    不匹配字符集中出现的任何一个字符15 ?    对前一个字符重复0到1次16 *    对前一个字符重复0到多次17 {m}    对前一个字符重复m次18 {m, n}    对前一个字符重复m到n次19 ()    匹配括号中的正则表达式,并保存为子组20 \d    匹配数字 21 \D    匹配任何非数字22 \s    匹配任意的空白符23 \S    匹配任意的非空白符24 \w    匹配任意字母数字字符25 \W    匹配任意非字母数字字符26 \b    匹配单词的开始或结束(边界)27 \nn    匹配已保存的子组28 \c    逐一匹配特殊字符c(即取消它的特殊含义,按字面匹配)29 \A(\Z)    匹配字符串的起始(结束)

 

0x02 使用闭包操作符(*, +, ?, {} )实现多次出现/重复匹配

1 [dn]ot?        #do, no, dot, not2 0?[1-9]        #1~9中任意一个数字,前面可能还有一个03 [0-9]{15,16}     #匹配15-16位数字4 </?[^>]+>        #匹配任何合法的HTML标签5 \w+-\d+        #一个由字母或数字组成的字符串和至少一个数字,中间用-连接6 ......

 

0x03 常用方法

1.compile(pattern, flags=0)  对正则表达式模式pattern进行编译,flags是可选标识符,并返回一个regex对象

1 >>> import re2 >>> test = hello world3 >>> r = re.compile(r\w*e\w*)    #匹配含有e的单词4 >>> r.findall(test)5 [hello]

2.match(pattern, string, flags=0)  尝试用正则表达式模式pattern匹配字符串string,flags是可选标识符,如果匹配成功,则返回一个匹配对象,否则返回None

1 >>> r = re.match(r\w+@\w+\.com,example@gmail.com)2 >>> print r.group(0)3 example@gmail.com

3.search(pattern, string, flags=0)  在字符串string中搜索正则表达式模式pattern的第一次出现,flags是可选标识符,如果匹配成功,则返回第一个匹配对象,否则返回None

re.match()和re.search()的用法是一样的,唯一的区别在于re.match()值匹配字符串的开头,如果在开头没有匹配到对应的字符串,那么就会返回None。而re.search()则会在字符串中进行搜索,直到找到一个匹配的字符串,并返回。

4.findall(pattern, string [, flags])  在字符串string中搜索正则表达式模式pattern的所有(非重复)出现,返回一个匹配对象的列表

1 >>> re.findall(r\w*o\w*, hot hello foo foo)2 [hot, hello, foo, foo]

 

5.sub(patternreplstringcount=0flags=0)  把字符串string中所有匹配正则表达式pattern的地方替换成字符串repl,如果count的值没有给出,则对所有匹配的地方进行替换

1 >>> re.sub(rX, Mr.Smith, attn: X, Dear X,)2 attn: Mr.Smith, Dear Mr.Smith,3 >>> re.sub(rX, Mr.Smith, attn: X, Dear X,, count=1) 4 attn: Mr.Smith, Dear X,5 >>> 

 

6.split(pattern, string, max=0)   根据正则表达式pattern中的分隔符把字符string分割成一个列表,返回成功匹配的列表,最多分割max次,默认是分割所有匹配的地方

1 >>> re.split(r:, str1:str2:str3)2 [str1, str2, str3]

用来分割who命令输出的结果

xt@linux-t2lc:~> who > who.txtxt      :0           2015-01-25 09:34 (:0)xt      pts/1        2015-01-26 13:41 (:0)xt      pts/2        2015-01-27 15:05 (:0)xt      pts/3        2015-01-27 15:05 (:0)xt      pts/4        2015-01-27 15:05 (:0)#who.py#!/usr/bin/env python# coding=utf-8import ref = open(who.txt, r)for eachLine in f.readlines():    print re.split(\s\s+|\t, eachLine.strip())f.close()e#output[xt, :0, 2015-01-25 09:34 (:0)][xt, pts/1, 2015-01-26 13:41 (:0)][xt, pts/2, 2015-01-27 15:06 (:0)][xt, pts/3, 2015-01-27 15:06 (:0)][xt, pts/4, 2015-01-27 15:06 (:0)]

 

Python Re模块