标签:sub mmm ace port center 实例 white search bit
正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。
re 模块用于正则表达式的操作。
匹配字符串中所有符合条件的元素。匹配上,返回list类型元素
import re obj = re.findall(‘\d+‘,‘hhh90080mmmbb2233pp‘) print(obj)
从字符串起始位置匹配符合条件的元素,单个匹配。匹配上,返回一个对象
注意:字符串起始位置的元素必须与正则表达式相匹配,不然返回None
import re obj = re.match(‘\d+‘,‘0008lkk‘) print(obj,type(obj)) if obj: print(obj.group())
在字符串中寻找匹配的元素,单个匹配。匹配上,返回一个对象
import re obj = re.search(‘\d+‘,‘hhh90080mmmbb2233pp‘) if obj: print(obj.group())
分组是用()进行的,一个正则表达式可以用括号进行分组
group()获得一个,多个分组截获的字符串;或所有分组匹配的整体字符串
groups()以元组形式返回全部分组截获的字符串
import re a = "123abc456ooo" print( re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(0)) #编号0代表整个匹配的子串;不填写参数时,相当于group(0) print( re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(1,2)) #指定多个参数时将以元组形式返回 (‘123‘, ‘abc‘) print(re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(2)) #指定一个参数时返回字符串 abc print (re.search("([0-9]*)([a-z]*)([0-9]*)", a).groups()) #(‘123‘, ‘abc‘, ‘456‘)
替换与正则表达式相匹配的字符串
import re s = "hello world 001,789 welcome" s_c = re.sub(‘\d+‘,‘amy‘,s,1) #只替换一次,不填count会全部替换 print(s_c)
比str.replace()更加强大。
根据指定的正则匹配进行分割。
注意:最后一个字符匹配成功的话,会分割出一个空格
import re n = "split1nnnnn2mmmmm3" n_c = re.split(‘[0-9]‘,n,1) #最多分割一次,不填maxsplit会全部分割 print(n_c)
将字符串形式的正则表达式编译为一个对象。
import re text = "You are so cool, oo" pattern = re.compile(r‘\w*oo\w*‘) #将正则表达式编译成Pattern对象 print(pattern.findall(text)) #查找所有包含oo的单词,使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None
语法 | 说明 | 表达式实例 | 匹配的字符串 |
字符 | |||
一般字符 | 匹配自身 | abc | abc |
. |
匹配任意字符(除换行符) 若指定flag DOTALL,则匹配任意字符,包括换行 |
a.c | akc |
\ | 转义字符,使其后的字符变成字面上的字符 | a\.c | a.c |
[...] | 字符集,[a*]匹配字符是a 或 *;’[a-z]匹配a到z之间的任意字符; [^f]匹配非 f 的任意字符;[\d]匹配数字. 字符集中除了 - ^ \ 外,其他特殊字符没有特殊含义 |
[a*]k |
aK *k |
数量(用在字符或(...)之后) | |||
* | 匹配前一个字符0或无限次 | ||
+ | 匹配前一个字符1或无限次 | ||
? | 匹配前一个字符0次或1次 | ||
{m} | 匹配前一个字符m次 | ||
{m,n} | 匹配前一个字符m到n次,省略m,0到n;省略n,m到无限 | ||
预定义字符(可以写在[]字符集中) | |||
\d | 数字:[0-9] | ||
\D | 非数字:[^\d] | ||
\w | 字母数字下划线:[A-Za-z0-9_] | ||
\W | [^\W] | ||
边界匹配 | |||
^ | 匹配字符串开头 | ^abc | abc |
$ |
匹配字符串结尾 | abc$ |
abc |
\A |
仅仅匹配字符串开头 |
\Aabc | abc |
\Z | 仅仅匹配字符串结尾 | abc\Z | abc |
\b | 匹配\w和\W之间;单词的开始或结束 | a\b!bc | a!bc |
\B | [^\b] | a\Bbc | abc |
逻辑,分组 | |||
| | |代表左右表达式任意匹配一个。从左 往右匹配,左边的匹配成功便跳过右边 |
abc|def | abc dfe |
(...) | 被括起来的表达式将作为分组;分组表 达式作为一个整体,后面可以接数量。表达式 中的 | 只在该组中有效。 从表达式的左边开始没遇到一个分组的左括号, 编号就加1 |
(abc){2} a(123|456)c |
abcabc a456c |
# flags I = IGNORECASE = sre_compile.SRE_FLAG_IGNORECASE # ignore case L = LOCALE = sre_compile.SRE_FLAG_LOCALE # assume current 8-bit locale U = UNICODE = sre_compile.SRE_FLAG_UNICODE # assume unicode locale M = MULTILINE = sre_compile.SRE_FLAG_MULTILINE # make anchors look for newline S = DOTALL = sre_compile.SRE_FLAG_DOTALL # make dot match newline X = VERBOSE = sre_compile.SRE_FLAG_VERBOSE # ignore whitespace and comments
正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
学习内容来自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
标签:sub mmm ace port center 实例 white search bit
原文地址:http://www.cnblogs.com/peiling-wu/p/6413602.html